メールが送信されるまでに行われていること

Pocket

メールが、送信先のメールサーバーに届くのはどういうことか?
コマンドプロンプトで、コマンドラインからメールを送ることで、どのような仕組みとなっているのかご案内します。
この方法を使うと、送信できない場合など、通信のどの部分がうまくいってないのか?がより分かりやすくなります。

コマンドプロンプトは、Windows の場合「スタート」ボタンから→プログラムとファイルの検索で「コマンドプロンプト」と打つと探せます。
>>コマンドプロンプトについて
>>Windows7でコマンドプロンプトを使う場合

コマンドラインでメール送信

[1]telnetを立ち上げる

コマンドプロンプトでtelnet 入力しEnter キーで確定します。
※確定は、以降全てEnter キーで行います。

telnet

telnet2

[2]SMTPサーバーへ接続する

今回は、下記メールアカウントを利用します。

送信元:test@hetemel.net
送信先:example@heteml.jp

hetemel.netが使っているSMTPサーバー(mail51.heteml.jp)へ587ポートを指定して接続します。
※25ポートでもOKです。これは、メールソフトで入力する送信ポートと同じです。

open 接続先のメールサーバー 587

telnet3

220のSMTPサービスコードが返ってきて、通信をする準備が完了したことが確認できました。
ここで応答がなければ、サーバーが正常な状態でない(メンテナンス中など)ことが分かります。

tepnet4

[3]SMTPサーバーへ「HELO」コマンドで応答を求める

helo 接続先のSMTPサーバー

250が応答コードとして返ってくれば成功です。

telnet5

[4]送信元:test@hetemel.net にログイン

auth login と入力後、base64encodeしたメールアカウントとパスワードを入力します。
例)test@hetemel.net をエンコードしたものは dGVzdEBoZXRlbWVsLm5ldA== です。
情報を入力したら、Enterキーで確定し、235 Authentication successfulと表示されたらログイン成功です。
>>base64エンコードはこちらから

auth login
メールアカウントをエンコードしたもの
パスワードをエンコードしたもの

telnet19

[5]「MAIL」と「RCPT」コマンドで、送信元と送信先のメールアドレスを送る

このコマンドで、サーバーへ送るのはメールアドレスだけです。250 Ok と表示されれば送信できています。

mail from:送信元メールアドレス
rcpt to:送信先メールアドレス

telnet7

[6]「DATA」コマンドで、メールデータを送信

data  の後の内容は全て送信される内容として扱われます。
なお、ここで送信元メールアドレスやメールタイトルは入力しなくても、メールは届きます。

data

telnet8

Enterキー . (ピリオド)Enterキー で、内容を送信したら、250  Okが返ってくるか確認します。

telnet9

[7]「QUIT」コマンドで、SMTPサーバーとの通信を切断

これで、セッションが終了しました。

telnet10

メールが届いているか確認します。

telnet11

このようにメールを送る際は、情報をまとめて送っているのではなく、メールアドレスや本文などの情報を分割して処理を行っています。
これは、メールソフト(メールクライアント)を使った場合でも、同様の処理です。

telnet18

メールの送信が完了しない場合など、この方法をお試しください。

Pocket