送信したメールがエラーになると、それを知らせるメールが戻ってきます。 今回は、そのメールがどこに戻ってくるのかについてお話しします。
はい、あなた。『そんなの送信した人の所に決まってるよ。』と思いましたね。
その通り。送信した人の所です。
でも、その送信した人って誰?
普通の郵便、紙のヤツね、あれを思い出すと宛先の他に差出人の住所・氏名も書きますよね。
それで、宛先が間違っているとその差出人の所に「宛先不明」みたいなゴム印を押されて戻ってきます。
メールも同様です。
メールを送信するときには宛先のメールアドレスの他に差出人のメールアドレスも指定します。 この差出人のメールアドレスにエラーメールが戻ってきます。 このメールを送信するときに指定するメールアドレスを宛先はエンベロープ To、差出人はエンベロープ From と言います。
エンベロープ From は、メールを送信するプロトコル SMTP の MAIL FROM コマンドで指定します。 SMTP のコマンドで指定するのでメールヘッダ等には記録されていません。
220 mta.example.com ESMTP
EHLO client.example.com
250-mta.example.com
250-SIZE 2097152
250-8BITMIME
250 HELP
MAIL FROM:<me@example.com>
250 ok
この SMTP というプロトコルは、メーラーからメールサーバーに送信するときだけではなく、メールサーバー間の送信にも用いられます。 メールサーバーはメールを受け取ったら、そのサーバーだけで扱うのではなく、自身で扱わないメールは他所のサーバーに転送します。 (この転送の様子はメールヘッダの Received を見ると分かります。) この転送にも SMTP を使用します。 SMTP を用いて転送している間は、そのコマンドで指定されるエンベロープ From の情報も転送されます。
転送されつづけたメールは、やがて宛先のメールサーバーにたどり着きます。 たどり着くと SMTP は終了です。 そのメールを開くとメールヘッダと本文が見えますがエンベロープは見えません。 エンベロープは SMTP のコマンドなので、SMTP が終了すると無くなるのです。
ここまでのお話でエンベロープ From は出てきましたが、Return-Path とか Errors-To とかは出てきませんでした。
ここ重要です。試験に出るよ。
メールを送信するときの差出人はエンベロープ From で指定する。メールヘッダではない。
Repeat after me.
メールを送信するときの差出人はエンベロープ From で指定する。メールヘッダではない。
Great!
ところで、メールの転送は先に説明したメールサーバー間の転送の他に、受信者の設定で行う転送もあります。 この場合、SMTP の転送は終了しているのでエンベロープが失われています。 でも、失われたエンベロープ From を差出人にして転送したいですね。
さきほどエンベロープは SMTP が終了すると無くなると言いました。
ウソです。
いや、ウソではないんですけど、全くエンベロープが失われるというわけでもないのです。
SMTP の転送が終了する目的地のメールサーバーでは、失われるエンベロープをメールヘッダに書き足します。
エンベロープ From は、到着したメールサーバーで Return-Path ヘッダとして記録されます。
Return-Path: <me@example.com>
Delivered-To: you@example.com
Received: from gateway.example.com (gateway.example.com. [198.51.100.3])
by mta.example.com with ESMTP
for <you@example.com>
Wed, 28 Feb 2018 17:32:43 +0900 (JST)
...
一旦受け取ったメールを転送する場合には、この Return-Path をエンベロープ From に指定することで、
転送メールの差出人も元の差出人にすることができます。
つまり、Return-Path ヘッダは受け取ったメールサーバーが記述します。
ここも重要です。配点高いよ。
Return-Path ヘッダは送信者は書かない。受信したメールサーバーが書く。
Repeat after me.
Return-Path ヘッダは送信者は書かない。受信したメールサーバーが書く。
Excellent!!
さて、タイトルにあるもう一つの Errors-To です。
Errors-To は使いません。以上。
何キョトンとした顔してるの?
だって、使わないんだからしょうがないじゃない。
Errors-To は前世紀に使っている人がいたらしい痕跡があります。
しかし、それは正しいものではなく『こんな風に使うらしいよ』という話が伝わって使っている人がいたみたいです。
でも、まー、過去に使った人がいたということは、どうでもいいです。
今知っていて欲しいことは、
Errors-To は使わない。
Repeat after me.
Errors-To は使わない。
Perfect!!!