このページの本文へ

電子メールプロトコル再入門 第4回

多言語メールにも寄与する技術を知っておこう

メールの添付ファイルを実現するMIMEのマルチパートとは?

2011年02月24日 06時00分更新

文● 遠藤哲

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回紹介したMIME(Multipurpose Internet Mail Extension)には、データ形式の異なる複数のコンテンツを1つのメッセージとして扱うため「マルチパート」というメッセージ形式が用意されている。メールの添付ファイルなどは、このマルチパートの仕組みを利用しているのだ。なお、以後は、コンテンツのことをMIMEの仕様で使われているエンティティという言葉で表わす


多言語や添付ファイルを実現するマルチパート

 図1はMIMEのマルチパート形式のメッセージである。メッセージ中に複数のエンティティが含まれていることを示しているのが、ヘッダのContent-Typeフィールドである。メディアタイプの「multipart」が複数のエンティティを持つことを示している部分だ。

図1●マルチパートエンティティ

 サブタイプの「mixed」は、MUA(Mail User Agent、いわゆるメールソフト)に対して、それぞれのエンティティで定義されているヘッダによって個別に表示することを要求している部分である。

 メディアタイプに続けて「boundary=~」というパラメータが設定されている(図1のヘッダ部の最下行)。このパラメータの値がエンティティの境界行である。マルチパートのエンティティは、この境界行がエンティティの前後に置かれ、それぞれのエンティティを識別するのである。

 境界行は2個のダッシュ「--」で始まる一意の文字列である。ヘッダに定義されている文字列を境界行として使うと、先頭にダッシュが2個加えられた文字列となる。図1では単純で短い文字列を使っているが、この文字列のパターンによりエンティティの境界を識別するために、エンティティ本体内に一致しない文字列にしなければならない。通常この文字列をユーザーが設定することはないので、MUAがエンティティ本体と一致しない境界文字列を自動的に生成すると覚えておこう。

 この境界行は最後のエンティティの後に置かれるとき、エンティティの最後を表わすため、境界行の文字列の終わりに2個の「--」を加え、それでエンティティの最後を示している。

SubjectフィールドのMIME拡張

 ここまではMIMEのヘッダフィールドを中心に見てきたが、SubjectフィールドやFrom/Toフィールドのdisplay-nameのように任意の文字列を扱うヘッダフィールド自身にもMIME拡張が適用されている。このヘッダフィールド内の文字列に適用されているMIME拡張を説明しよう。

 メッセージヘッダでのMIMEの適用方法は、RFC2047で定義されている。数あるヘッダフィールドの中でも、Subject やFrom/Toなどは、メッセージボディと同じく多言語で記述可能なフィールドである。フィールド名はUS-ASCIIなので、MIMEを適用する部分はおのずとフィールドボディとなる。

 図2はヘッダフィールドにMIMEを適用する際のフォーマットである。MIMEを適用する部分は「=?」「?=」で挟むことで識別する。設定する情報は「文字セット」「符号化種別」「符号化した文字」であり、それぞれの境界は「?」で示す。

図2●Subjectフィールドの拡張

 具体的な設定イメージを見てみよう。文字セットには「iso-2022-jp」が指定され、符号化種別に「B」という文字が設定されている。符号化種別に設定できる文字は「Q」と「B」の2種類である。Qは「quoted-printable」符号化の変形を意味する。「=」、「?」、「_」、空白文字を除く表示可能なUS-ASCII文字は符号化しなくてよいが、それ以外の文字は「=」に続く2桁の16進数値に置き換えなければならない。たとえば空白文字は「=20」に置き換えるのである。符号化種別にBが指定された場合BASE64符号化が使われる。

 先ほどの図2では符号化種別に「B」が指定されているので、後続のエンコードされた文字はBASE64で符号化されたとわかる。

 ここまでMIMEに関する説明をしてきた。電子メールが今のように多言語に対応し、さまざまなデータファイルの転送に使えるのはMIMEによるところが大きいのだ。次回は、メールを転送するプロトコル「SMTP」について解説しよう。

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード