日本語メールの仕組み

日本語メールの仕組み

以前、掲載した「メール関連のRFC」の記事で、メールで使える文字列はASCII文字(7bit文字)のみで、そのままでは日本語が扱えない、というお話をしました。この制限は、MIMEISO-2022-JP(いわゆるJISメール)といった方法で解決されているのですが、今回はこれらの方法で実際にどうやって日本語メールを扱っているのかを見ていきます。

日本語をそのまま送っているわけではない

普段、私たちはメールのやり取りで何気なく日本語を使っていますが、裏側ではメールの内容を一旦ASCII文字(7bit文字)に変換(エンコード)した上で送信し、受信側で再び元の表示形式に復元(デコード)する、といったことが行われています

日本語メールのエンコードとデコード

ASCII文字(7bit文字)に変換した状態のメールのことをよく「メールソース」などと表現することがあります。メールソースはメールメッセージの実体であり、文字化けの原因調査や配信遅延の調査などに役立ちます。メールソースからはさまざまな情報が得られますが、今回はこのうち文字コード周りの情報に着目します。

なお、メール本文とメールヘッダ(件名や送信者名など)では変換ルールが異なるため、別々に解説します。

メール本文に日本語を含めるには

メール本文の文字コードを定義するのは、以下の情報です。

  • charset(文字セット)
    文字セットはContent-Typeヘッダ内の属性情報で、文字コードの種類を表すパラメータです。一般的には「UTF-8」や「ISO-2022-JP」などといった値を指定します。
  • Content-Transfer-Encoding(エンコード方式)
    文字セットにUTF-8などの8bit文字を利用する場合、UTF-8↔7bit文字の相互変換を行います。Content-Transfer-Encodingはこのエンコード方式を指定するヘッダです。MIMEで定められているエンコード方式には「Base64」や「Quoted-Printable」といったものがあります。
    なお、文字セットにISO-2022-JPを指定した場合、エンコード方式には通常「7bit」を指定します。元々ISO-2022-JPは7bit文字であるため、変換不要ということを意味しています。

例えば、本文が「○○様<改行>いつもお世話になっております。」という内容のメールを、文字セット「UTF-8」、エンコード方式「Base64」で送る場合、メールソースは次のような内容になります。

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

4peL4peL5qeYDQrjgYTjgaTjgoLjgYrkuJboqbHjgavjgarjgaPjgabjgYrjgorjgb7jgZnjgII=

送信側メールクライアントで作成したメールソースを、メールサーバを通じて受け取った受信側メールクライアントが、人間が読める形式に変換(デコード)して画面上に表示します

メールヘッダに日本語を含めるには

次に、メールヘッダ(件名や送信者名など)に日本語を含める方法について見ていきます。例えば、件名が「こんにちは」という内容を、文字セット「UTF-8」、エンコード方式「Base64」で指定する場合、メールソースのSubjectヘッダは次のような内容になります。

Subject: =?UTF-8?B?44GT44KT44Gr44Gh44Gv?=

Subjectヘッダに限らず、ヘッダ上にASCII以外の文字を含める場合、次のような形式で指定します。

=?文字セット?エンコード方式?エンコード後の文字列?=

ここで、文字セットには、メール本文と同様「UTF-8」や「ISO-2022-JP」といった値が入り、エンコード方式には、Base64の場合「B」、Quoted-Printableの場合「Q」いずれかの値が入ります。上述の本文のエンコード方式で利用できる「7bit」(無変換)に相当するものはありません。「B」と「Q」の使い分けについてはRFC 2047が参考になると思います。

文字化けを調査するには

メールが文字化けした場合、次のような観点でメールソースを確認すると原因の特定が行える場合があります。

  • 送信リクエストで指定したメールソースの内容が宛先にそのまま届いているか
  • 指定した文字セットやエンコード方式と実際の内容の整合が取れているか

さいごに

日本では歴史的な経緯上「日本語メールはISO-2022-JPで送る」という考え方が定着していましたが、最近では携帯電話を含めほとんどのメールクライアントでUTF-8を扱えるようになってきています。さらに、有名どころのWebメーラは新規作成時の文字コードはUTF-8固定です。こういった状況から、今後はUTF-8がデファクトスタンダードになっていくのではないかと考えています。

参考

安心してメールを送信しましょう

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。