文章と画像を送る仕組み
日本語の文章と画像情報がASCII文字に変換されるので、この2つがメールメッセージのボディになると、どこからが日本語の文章でどこからが画像情報か識別するための仕組みが必要となる。そのための仕組みが「マルチパート」である(図3)。
マルチパート構成のメールメッセージでは、ヘッダのContent-Typeフィールドにマルチパートであることと、ボディに含むコンテンツのまとまりを識別するための文字列が定義される。メールメッセージのボディには、パートを識別する文字列で区切られた日本語の文章や画像情報のコンテンツ(エンティティ)が並ぶ。それぞれのコンテンツでメディアタイプや用いられた符号化方式が異なるため、それらを示すヘッダとボディの形式で構成されている。このようにして、異なるメディアタイプのコンテンツをメールメッセージのボディに収めているのである。
SubjectのMIME拡張について
ここまで見てきたように、MIMEのヘッダフィールドはメールメッセージの“ボディ”に関する情報である。したがってヘッダ中のメールの件名(Subject)はMIMEヘッダフィールドで定義する対象とならない。しかし、これでは英語以外の言語で件名を記述できないので、ヘッダフィールド“Subject”についてはMIME拡張の適用がRFCで規定されている。
先ほどの図1において、日本語で書かれた件名がヘッダ情報では下記のようなASCII文字の羅列になっている。
Subject: =?iso-2002-jp?B?GyRCJG8kKyRrGyhCTWFpbA==?=
これはSubjectのMIME拡張によってASCII文字に変換されていたからである。英語以外の文字が使われている場合には、件名の最初に文字コードの記述がある。日本語で書かれている場合は、“=?iso-2022-jp?”という文字コードの情報がSubjectの中に埋め込まれているのである。
このような工夫により、世界中のユーザーが母国語でメールを書くことができる。さらに写真などのデジタルデータを添付することで、さまざまなコミュニケーションに利用できるようになった。
エンベロープとは
続いては、以上のヘッダ情報がメールメッセージの送受信にどのように関係しているのか見ていこう。
メールメッセージの送信には、SMTP(Simple Mail Transfer Protocol)というプロトコルが使われる。SMTPにおけるメールメッセージは“送信データ”となる。一般的に通信プロトコルはオリジナルのデータを改変することなく宛先に届ける。そのため送信データとは別に、制御用の情報が存在している。
SMTPもこの一般的な通信プロトコルの原則に則って、送信するメールメッセージの差出人と宛先をデータ(メールメッセージ)とは別に通知する。このやり取りを表わしたものが図4である。
メールメッセージを送信する前に、差出人を「MAIL FROM」、宛先を「RCPT TO」というSMTPに定義されているコマンドで相手のコンピュータに通知する。そのあと「DATA」というコマンドを使ってメールメッセージが送られ、データをすべて送信すると「QUIT」コマンドでSMTPのセッションを終了する。このように、実際に送信するメールメッセージを囲む形でSMTPコマンドが交わされている。
現実世界の手紙も相手に読んでほしいメッセージは封筒で包まれていて、封筒には差出人と宛先という配送に必要な情報しかない。同様に、メールメッセージを送信するためSMTPのコマンドが交わされる部分を「エンベロープ(Envelope、封筒)」と呼ぶのである。
なお、エンベロープで通知される差出人および宛先はメールメッセージのヘッダから得ている。メールメッセージのヘッダには差出人情報がFromフィールドに、宛先情報がToフィールドにある。そのほか宛先を示すヘッダフィールドにはCc、Bccがある。そしてFromフィールドはSMTPのMAIL TOコマンドで、そのほかに宛先を示すTo、Cc、BccのフィールドはすべてSMTPのRCPT TOコマンドで通知されているのである。
ただしBccは配布先を隠す際に用いるので、ヘッダ情報に記述されたまま宛先に届くのは都合が悪い。そのため、メールメッセージのBccヘッダフィールドは、SMTPサーバでエンベロープを展開するとヘッダ情報から削除される。
(次ページ、「メールマガジンを実現する仕組み」に続く)

この連載の記事
- 第6回 メールシステムの脆弱性とその回避策
- 第5回 メールを受け取る仕組みはどうなっていますか??
- 第4回 メールを送受信する仕組みとは?
- 第2回 メールを支えるドメイン名とDNSの仕組み
- 第1回 メールが届く仕組みを知っていますか?
- 電子メールの秘密
- この連載の一覧へ