インターネットで交換されるメールは、次のようなパートで構成されています。
HeaderとDataはメールソフトの[メッセージの詳細]などで見ることができるためなじみの深いものですが、EnvelopeはMTA(サーバ)間でメッセージが交換される際に使用されるものであるため、普通見ることはできません。
HeaderとDataが便せんに書かれた手紙の内容だとすると、Envelopeはその名のとおり封筒に書かれたあて先(Envelope To)や差出人(Envelope From)になります。Envelopeを見ることができないのは、手紙が開封されて封筒が始末された後では差出人やあて先が分からないのと同じことです。
MTAは受け取った便せんを封筒に入れ、差出人とあて先を記入し(Envelope化し)、次のMTAに配信します。受信側のMTAは封書を開封し、中身のメッセージだけをユーザーに引き渡します。つまり、MTA間ではHeaderではなくEnvelopeが利用されているのです。いくら便せんにクパチーノやサンノゼと書こうとも、肝心の封筒に岐阜県各務原市と書いてあればそちらに届いてしまうのと同じように、Envelopeで指定されたあて先にしか届きません。
Envelope ToやEnvelope Fromには、さまざまな表現が用いられます。
もう少し実体がつかみやすいように、telnetコマンドを使ったMTAとの対話で見ていきましょう。以下は、qmailが動作しているサーバで直接telnetを行っている様子です。
$ telnet localhost smtp |
HeaderではuserB@example.jpへメールを送信しているはずなのに、実際はuser2@example.jpに届いていることが分かるはずです。メールループを未然に防ぐには、この「Envelope From」の理解が重要になります。
メールソフトで返信ボタンを押してメールを作成する場合、送られてきたメールヘッダの「Replay-to」や「From」を返信メッセージの「To」に置き換えますが、MTA間でエラーの通知を行う先はEnvelope Fromになります。「User Unknown」などのエラー通知がMLや投稿者に流れずML管理者に戻るように注意する必要があります(ezmlmでは対応されています)。
Headerデータ中のReply-Toも注意を必要とする重要なフィールドです。Reply-Toは、通常はFromフィールドのアドレスと違うアドレスに返信させたいときに用いるものです。Fromと同じアドレスをReply-Toに設定してしまうなど、誤解の多いフィールドでもあります。
例えば、MLの参加者の中にメール自動応答プログラムを設定してしまったユーザーがいたとします。メール自動応答プログラムはMTAではなくMTU(メールクライアント)として機能しており、Envelopeデータを参照することができず、Headerデータの中で返信先を探し、Replay-Toに応答メッセージを返してしまう仕様だったとします。ML側で親切のつもりでReply-ToをMLのアドレスで上書きするようにしていた場合、応答メッセージはMLのアドレスに送られ、MLはこれをユーザーの投稿メッセージと解釈して通常どおり一斉送信します。すると、再び自動応答プログラムがメッセージを受け取ってMLに自動応答します。これが無限に続く現象が「メールループ」です。
実際には自動応答プログラムやezmlmの防御機能(注)により防げますが、リストの参加者がどのような自動応答プログラムを用意しているか予想できないため、対策を施しておくことが望まれます。
Copyright © ITmedia, Inc. All Rights Reserved.