
メールには、宛先や送信元、件名といった情報が付けられる。またそれだけではなく、本文がどのような言語で書かれているか、添付ファイルはあるのかといったものも必要になる。そうした情報はヘッダという部分に書かれている。
メッセージ形式を定義するRFC
電子メールのプロトコルを解説する前に電子メールのメッセージ形式(書式)を解説しておこう。基本的なメッセージ形式はRFC2822(Internet Message Format、2001)で仕様が定められている。このRFCはそれまでメール形式を定義していたRFC822(Standard for the format of ARPA Internet text message,1982)を置き換えたものだ。基本的な内容はそのまま継承されており、使われていない機能を削除し、仕様のあいまいな部分を明確にするといった改善が行なわれている。
まずRFC2822で定義されているメッセージ形式について見てみよう。
メッセージのヘッダとボディ
メールのメッセージは、「ヘッダ」と「ボディ」から成り立っている(図1)。ヘッダとボディは境界を空白行で示すという、とてもシンプルな構造である。
メッセージを構成するヘッダとボディは一連のテキスト行でできていて、各行の終端は一組のCR(復帰)とLF(改行)の2文字によって示される。メッセージの記述に使われる文字は、1から127の数値(7ビット長)で表わされるUS-ASCIIが標準となっている。
RFC2822では1行の文字数について、SMTP標準仕様の制限から「1行はCRLFを除く998文字以内でなければならない(MUST)」と規定するとともに、コンソール画面に読みやすく表示するため1行を78文字で設計しているアプリケーションへの配慮から「1行はCRLFを除く78文字以内とすべき(SHOULD)」との勧告も併せて行なっている。
また、メッセージの各パートに記述される内容は、メールを作成する際に宛先やメールの表題を付けるが、これらの情報はRFCで定義されている「ヘッダフィールド」という仕様に従ってメッセージのヘッダ情報として記述される。メールの本文はメッセージのボディとなる。
図1をみると、ヘッダの部分に多くのヘッダフィールドが記述されていることがわかる。
ヘッダの要素<br /> ヘッダフィールド
RFC2822はメッセージの構造のほか、ヘッダに記述するヘッダフィールドも定義している。RFC2822に定義されているヘッダは表1に示すように23種類ある。この中には旧版(RFC822)で定義されていた「extension-field」や「X-」から始まる「user-defined-field」は含まれておらず、optional-fieldの扱いとなる。

表1●メールのメッセージ形式
ヘッダフィールドは、「<フィールド名>:<フィールドボディ>」という共通のフォーマットが定義されている。フィールド名とフィールドボディは「:」(コロン)でその境界が示され、フィールドボディはフィールド名ごとに記述される内容が定義されている。
それでは図1のヘッダに見られる標準ヘッダフィールドを見てみよう。
「From」フィールドはメッセージの作成者を示すフィールドである。このフィールドのフォーマットは、[display-name]<addr-spec> となっている。displaynameは省略可能なパラメータで、メーラのFrom欄に表示する文字列を指定するものだ。その後ろに続くaddr-specはメールアドレスのことで省略できない。Fromフィールドには通常1人のメールアドレスしか設定しないが、RFCの定義では「,」で区切ることで複数のメールアドレスを作成者として記述することが可能だ。
「To」フィールドはメッセージのアドレスを示すフィールドである。フォーマットはFromフィールドと同じで、メッセージのTo欄に表示する文字列を指定できる。メールアドレスは省略できず、「,」で区切ることで複数の宛先を指定可能である。CcやBccも同様の書式となる。
「Subject」はメッセージの「件名」である。このフィールドは、本来US-ASCIIで記述しなければならないフィールドだ。次回以降で解説するが、インターネット標準であるMIME(Multipurpose Internet Mail Extensions)の拡張によりUS-ASCII以外の文字を使えるようになっている。その場合、「=?iso-2022-jp?B?~?=」のように件名に文字セットを示す情報が挿入される。
「Date」フィールドはメッセージの作成日を示す。RFC2822では年の表記が改善され、旧版では2桁で表示されていたものが4桁表示に改められている。このフィールドはメーラによって設定されるフィールドで、「Send( 送信)」または「Submit(投函)」ボタンが押された時刻が設定されるものとしている。
「Message-ID」フィールドはメッセージを一意に識別するための情報が記述されている。
Message-IDはホストによって生成されるユニークなIDである。図1 の中ではMessage-IDの下にいくつかのヘッダフィールドが記述されている。その中でも「MIME-Version」「Content-Type」「Content-Transfer-Encoding」の3つのフィールドは、メッセージの日本語での記述や添付ファイルなどを利用することを可能にしている、MIMEで定義されているヘッダフィールドである。
さらに続くフィールド(X-Mailer、XMimeOLEなど)はメーラの情報などを記述している。このフィールドはRFC822で定義されていたユーザー定義フィールドである。
●
代表的な標準フィールドの説明はここまでとし、次回はUS-ASCII以外の文字を使えるようにするMIMEの説明に移ろう。

この連載の記事
- 第9回 いろいろな場所で同じメールを読めるIMAPの仕組みとは?
- 第8回 メールクライアントの動作からPOPのやりとりを見てみよう
- 第7回 メールの受信用に作られたPOPを学ぶ
- 第6回 SMTPの拡張機能を確かめる「EHLOコマンド」を知ろう!
- 第5回 メールを送る際に使われるSMTPの仕組みとは?
- 第4回 メールの添付ファイルを実現するMIMEのマルチパートとは?
- 第3回 メール誕生からある「7ビットの制約」を越えるMIMEとは?
- 第1回 電子メールを基礎の基礎から学んでいこう
- 電子メールプロトコル再入門<目次>
- この連載の一覧へ