SMTPヘッダ情報

メールにはヘッダ情報が付いています。何故、本文以外のヘッダ情報が必要なのでしょうか?

 郵便で考えてみます。郵便には、書留サービスというのがあります。このサービスは、引き受けから配達までの郵便物等の送達過程を記録しておき、万一、郵便物等が壊れたり、届かなかった場合に、損害額を賠償してくれるサービスです。

 また、書留の受領証に記載されている引受番号を用いることで、郵便追跡システムで、配達状況を確認することもできます。

 電子メールも同じような仕組みがあります。それを実現するために転送過程がメールヘッダに記録されています。

 メールヘッダには、メールが送信されて宛先に届くまでの履歴が記録されています。私達がメーラーを使って見ているのは、ヘッダの下側にある本文部分だけなのです。メーラでは通常、メールヘッダを見せないようにしています。

 トラブルがなければ、メールヘッダの情報を確認する必要はありません。普段の利用にメールヘッダーの中身まで確認する必要がないからです。

 メールヘッダが確認できないわけではありません。メーラーはメニューからヘッダの内容を確認できるようにしています。

 転送過程を記録しておくことで、発信した送信元アドレス、コンピュータやサーバの情報を確認することができるため、スパムメールやウイルスメールを見極めることができます。

 スパムメールやウイルスメールは送信者や経由するコンピュータやサーバを事実と異なるものに偽装しています。またメールヘッダには、転送過程だけでなく、複数の人にメールを送るCCやBCC の情報も記録しています。

メールヘッダには下表の項目があります。

SMTPのヘッダ情報
項目内容
Date:メールの発信日時
From:メールの発信元アドレス
Sender:メールの送信者のアドレス。
 From:はメール原稿の作成者を表し、共著した場合には、From:に複数のアドレスを指定することができます。Sender:は、実際にメールを送信した者のアドレスを表す。
 メーラーの制約で、通常From:に1つのアドレスしか記載できないものが多いので、通常、Sender:が意識されることはありません。
To:メールの送信先アドレス
Cc:メールの共同送信先アドレス
Bcc:同上(受信者のメール上では削除される)
Subject:メールの表題
Message-Id:電子メールの識別ID。ネットワークで唯一の値が割り与えられる。
Received:電子メールの配信経路での受信したサーバ名。各MTAごとに追加され、経路追跡に利用される。
Reply-to:送信元と違う電子メールアドレスへの返信を要求する場合に付け加えられる。エンベロープのMAIL FROM:の内容。
In-Reply-To:返信時にどのメールへの返信かを示すヘッダ。通常はMessage-IDが引用される。
References:返信時に使用されるヘッダ。References:とMessage-Id:が引用される。多くのメーラーは、この値を用いてスレッド表示を行う。
Return-path:メールが宛先に届かない場合のエラー通知を行うためのアドレス。
Mime-Version:MIMEのバージョンを示す。
Content-Transfer-Encording:エンコードタイプを示す。
SMTPのヘッダ情報

メールサーバは、このヘッダー情報を読み取って仕分けなども行っています。

 ちょっとややこしい話なのですが、実際のSMTPの通信では、メールヘッダは使われていません。メールヘッダが、郵便でいうところの封筒に書く宛先や送信元の住所を示しているように思えますが、SMTP通信においては、封筒の役割を果たすエンベロープが使われています。

 メーラーを使ってメールを作成するとメールヘッダとメール本文が作られます。実際にメールを送る時には、SMTPコマンドで通信を行うため、エンベロープにメールヘッダの情報がコピーされて通信が行われています。

メールヘッダとエンベロープ

メールは、メールヘッダと本文から構成されています。

 メールヘッダには、FROM(送信元)、TO(宛先)、Subject(題名)などからなります。詳しくは、上の「SMTPヘッダ情報」で説明しています。本文は、相手に伝えるメール本文が記載されます。

 ここで、勘違いされやすいのですが、実際のSMTPの通信では、メールヘッダは使われていません。メールヘッダが、郵便でいうところの封筒の宛先や送信元の住所を表しているように思えますが、SMTP通信においては、封筒の役割を果たしているのは、エンベロープなのです。

 エンベロープ(envelope)とは、英語で封筒という意味の単語です。エンベロープにMTA(Message Transfer Agent)が送信元や宛先を付加するようになっています。Outlook Expressなどのメーラでは、ユーザーに見せないようにしています。

 実際に通信する時にエンベロープにメールヘッダの情報がコピーされます。このエンベロープの情報は、SMTPコマンドレベルで使用され、メーラーが自動で作成するので、一般的には入力できないようになっています。

 SMTPにおける通信の流れは、まずTCPで接続してから、送信元アドレス、宛先アドレス、メールの本文という順番でデータを送ります。

 送信元アドレスを送信するには、MAILコマンドを使い、引数として「MAIL FROM:」を指定して送信元アドレスを送ります。その後に、RCPTコマンドで引数に「RCPT TO:」を指定して宛先アドレスを送ります。最後にメールの本体を送信するようになっています。