こんにちは、nemoです。
早速ですが、メールを送信するプロトコルはSMTP(Simple Mail Transfer Protocol)です。
ただ、これを意識してメールを送信する人はいません。メーラが変わりに行っているからです。
ではまず、どのようなメールがメーラから投げられるか見てみましょう。
【検証方法】
1.localにダミーメールサーバ(smtp4dev)をポート25番で起動させる。
2.Mozilla Thunderbirdを起動し、SMTPサーバの設定をlocalhostのポート25番に設定。
3.原稿を作成し、送信。
4.smtp4devにメールが届いていることを確認し、Sessionsタグの[View log]ボタンをクリックし、発行されたSMTPコマンドを確認。
この結果、メーラからメールを送信する際にどのような手順で行っているのかがわかりましたね。
[plain] 220 localhost smtp4dev ready EHLO [127.0.0.1] 250-Nice to meet you. 250-8BITMIME 250-STARTTLS 250-AUTH=CRAM-MD5 PLAIN LOGIN ANONYMOUS 250-AUTH CRAM-MD5 PLAIN LOGIN ANONYMOUS 250 SIZE MAIL FROM:<nemoto@sample.com> SIZE=356 250 Okey dokey RCPT TO:<test@sample.com> 250 Recipient accepted RSET 250 Rset completed RSET 250 Rset completed MAIL FROM:<nemoto@sample.com> SIZE=356 250 Okey dokey RCPT TO:<test@sample.com> 250 Recipient accepted DATA 354 End message with period Message-ID: <4F9F23A3.1000208@sample.com> Date: Tue, 01 May 2012 08:43:31 +0900 From: nemoto <nemoto@sample.com> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 To: test@sample.com Subject: Hello Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit I am Bob . 250 Mail accepted QUIT 221 See you later aligator [/plain]
この手順は、メールサーバにtelnetで接続し、SMTPコマンド叩く場合にも同様です。
では次に、実際に[telnet localhost 25]で接続し、以下のSMTPコマンドを実行します。
[plain] 220 localhost smtp4dev ready EHLO [127.0.0.1] 250-Nice to meet you. 250-8BITMIME 250-STARTTLS 250-AUTH=CRAM-MD5 PLAIN LOGIN ANONYMOUS 250-AUTH CRAM-MD5 PLAIN LOGIN ANONYMOUS 250 SIZE MAIL FROM:<nemoto@sample.com> SIZE=3RCPT TO:<test@sample.com> 250 Recipient accepted56 250 Okey dokey DATA 354 Please start mail input. Message-ID: <4F9F23A3.1000208@sample.com> Date: Tue, 01 May 2012 08:43:31 +0900 From: nemoto <nemoto@sample.com> ird/12.0.1: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120428 Thunderb MIME-Version: 1.0 To: test@sample.com Subject: Hello Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit I am Bob . 250 Mail queued for delivery. QUIT 221 Closing connection. Good bye. [/plain]
先ほど同様、ダミーメールサーバにメールが送信されたことが確認でき、また同様のSMTPコマンドが発行されていることがわかります。
さてここで、Thunderbirdから送信されたメールと、telnetで接続しSMTPコマンドを叩いて送信されたメールの両方をsmtp4devのMessageタグから[View]ボタンをクリックし確認してみてください。
どちらも同様のSMTPコマンドを発行しているので、メールの内容も同様であることを確認出来たと思います。
同様のメールです。
あら?と思われる方もいるとは思いますが、どちらのメールも送信したタイミングが違うのに、日付はどちらも同じ日時を示しています。
そうなんです。メールの日付はメールを送信した日付でもなければ、メールを受信した日付でもありません。
日付は、メールヘッダーに記述されているメールヘッダーのDateを表示しているだけです。
SMTPではMAIL FROMコマンドで指定したアドレスが、差出人になります。
次にRCPT TOコマンドで指定したアドレスが、宛先になります。
複数の宛先が存在する場合は、その分だけRCPT TOコマンドを繰り返します。
これがSMTPでの宛先です。
つまり、メールに表示されている差出人(From)、宛先(To)についても、日付同様にメールヘッダーのFromおよびCcを表示しているだけであり、正しい差出人・宛先ではないということです。
ただ、実際にはメーラ側で、メーラのFromに指定しているアドレスを、MAIL FROMコマンドで指定し、かつメールヘッダーのFROMにも指定していることから、送った人はFromの人と認識しメールのやり取りをしていることになります。(Toについても同様)
また、CcやBccについてもメーラ側で指定がある場合には、RCPT TOコマンドでTo同様に繰り返します。(Bccの宛先はメールヘッダーに記述しなければ、受け取る側としては誰に送信しているかわからないので、Bccの挙動としては満たしていますよね?)
ということで、今回は
・メーラからメールを送信する際にどのようなプロトコルで送信しているのか?
・そのプロトコルでメールを送信した結果、メーラではどのように見えるのか?
について話ました。
またね