RECOMMEND
C# 言語リファレンス Black Book
C# 言語リファレンス Black Book (JUGEMレビュー »)
ビル ワグナー, Bill Wagner, スリーエーシステムズ, アクロバイト
RECOMMEND
RECOMMEND
SELECTED ENTRIES
CATEGORIES
ARCHIVES
MOBILE
qrcode
LINKS
PROFILE
OTHERS

12
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--

メール

主に、メール送受信ライブラリを紹介します。各種ソフトウェア、PHPコンテンツ制作、SEO対策もお任せください。
<< 絶対分かる!オブジェクト指向思考-3 | main | ExwarpMailKitバージョンアップのお知らせ(1.0.339.*) >>
メール
0
    このブログでは、インターネットメール(Eメール)の仕組みを簡単に解説します。
    今回は、メールメッセージの構成要素についての説明です。

    メールの構成要素は、大きく分けてヘッダーボディです。
    ヘッダーは、メールのメタデータで、メーラーで文字となって表示されることは比較的少ない部分ですが、特に日本語のメールの場合この部分が大変重要な意味を持ち、実装にも特別手間がかかります。

    メールヘッダーの各項目は、ヘッダーフィールドと呼ばれます。ヘッダーフィールドは、コロン(:)で区切って、ヘッダーフィールド名とヘッダーフィールドボディに分けられます。
    幾つかのメールヘッダーは、複数の情報を保持します。このようなヘッダーフィールドを構造化ヘッダーフィールド(Structured Header Field)といいます。
    例えば、Content-Typeヘッダーフィールドには、MIMEタイプと、メールに適用されている文字セットを指定することがほとんどです。
    逆に、件名(Subject)などのヘッダーフィールドは構造化されていないヘッダーフィールドです。主に人間が見るための情報は構造化されていないヘッダーフィールドが使用されます。

    ボディ部には、メールの本文が記録されます。日本語では、多くの場合iso-2022-jpという文字セットでエンコードされたバイト列で記録されますが、時にShift-JISなどのように8ビットの文字セットが使われる場合もありますが、この場合はBase64という方法でメール本文が7ビットになるように変換されることがほとんどです。
    こうしたメールのボディに関する情報もすべてメールヘッダーに含まれていなければ、メーラーは正しくメールを解釈できないのです。

    メールヘッダーとメールボディはNULL行(CR/LFのみの行)で区切られます。
    実装時に注意すべき点として、ヘッダーが存在しないメールが時々あったり、逆にヘッダーのみのメールも存在し得るという点です。単純にNULL行を検索するだけでは、効した状況にうまく対処できないため実装時には特に注意する必要があるでしょう。


    7ビット文字セットと8ビット文字セット


    もともと、Eメールは英語だけで書かれていました。英数字と記号は128個のコードで表現することができたたため、7ビット(2の7乗)で十分表現できたのです。この文字セットを特別に(US-ASCII)と呼びます。
    メール環境では、オクテットOctet)という8ビットのデータの集まりを1つの単位として扱いますが、US-ASCIIのような7ビット文字では8ビット目は使用しません。
    ところが、日本語の文字セットは、16ビット(8ビット×2)で表現されることが多く、オクテット(8ビット)に分割したときに8ビット目も使ってしまいます。
    このように当初のメール環境との互換性のために、実際は8ビットのままでも問題のないことがほとんどなのですが、今でもメールメッセージは7ビットで表現するのが一般的になっています。8ビットのデータを7ビットに変換するためには、たいていBase64という手法が用いられます。
    | others | 13:27 | - | - | - | - |