エンベロープ From と Return-Path と Errors-To と

送信したメールがエラーになると、それを知らせるメールが戻ってきます。 今回は、そのメールがどこに戻ってくるのかについてお話しします。

はい、あなた。『そんなの送信した人の所に決まってるよ。』と思いましたね。
その通り。送信した人の所です。 でも、その送信した人って誰?

普通の郵便、紙のヤツね、あれを思い出すと宛先の他に差出人の住所・氏名も書きますよね。 それで、宛先が間違っているとその差出人の所に「宛先不明」みたいなゴム印を押されて戻ってきます。
メールも同様です。

f:id:vamoscavy:20180228173750j:plain

メールを送信するときには宛先のメールアドレスの他に差出人のメールアドレスも指定します。 この差出人のメールアドレスにエラーメールが戻ってきます。 このメールを送信するときに指定するメールアドレスを宛先はエンベロープ 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!!!