マイム
「それでは、MIME 準拠のメッセージはどのように作成するのでしょうか?」 上記の一般的な説明を踏まえて、いわゆる MIME メッセージが何であるかを見てみましょう。
最も単純なMIMEメッセージ
このメッセージにはセグメント、つまり添付ファイルがありません。ただし、これは MIME メッセージであるため、必要なヘッダーが必要です。
差出人: php@php.net
宛先: 'Alex (the Great)'
件名: ブセファロス
MIME-バージョン: 1.0
こんにちは、アレクサンダー
元気ですか?中身は何もなく、MIME ヘッダーを持つ単純な RFC-822
準拠のメッセージ (テキスト メール) です。 Content-Type ヘッダーが指定されていない場合は、Content-Type: text/plain;charset='us-ascii' であると想定されることに注意してください。送信者: 'Alex (the Great)'
件名: ブセファロス
MIME-Version: 1.0
Content-Type: image/jpg=' buce.jpg'
Content -Transfer-Encoding: Base64
Content-Description: 彼を自分で見てください
<....base64 でエンコードされた Bucephalus の jpg 画像...>「こんにちは、でも私は欲しいです」 Word ドキュメントと子犬の写真を同じメールで送信するには...
!」と、あるユーザーは言いました! true
の場合、上記の例は単純すぎるため、愛好家と現代の電子メール処理ニーズの両方をサポートするのに十分なコンテンツがありません。実際、
多くの電子メール クライアントでは説明フィールドさえ表示できません。
これが私たちが直面している「多部情報」です。
マルチパートメッセージ
この概念により、1 つのメールで複数のアイテムを送信できます。たとえば、Alexander が php@php.net に自分の馬の
写真を、その馬の家系図と素晴らしい説明とともに電子メールで送信したいとします。このような単純な要件は、マルチパート メッセージの概念なしでは満たすことができません。この場合、
受信者が写真、家族図、素晴らしい説明を取得できるように、Content-Type ヘッダーを使用して電子メールのさまざまな部分をサポートするラッパーを作成しました。
Content-Type ヘッダーの値は「multipart」になり、これは完全な電子メール メッセージであり、このヘッダーは
メッセージのみをカプセル化することを示します。また、「混合」サブタイプもあります (結局のところ、写真、家系図、および 7 ビットのテキスト情報は異なるタイプですよね?)。
全体像を見てみましょう:
From: 'Alex (the Great)'
To: php@php.net
Subject: re: Bucepolus
MIME-Version : 1.0
Content-Type: multipart/mixed;
boundary="XX-1234DED00099A";
Content-Transfer-Encoding: 7bit
これは MIME エンコードされたメッセージです
--XX-1234DED00099A
Content-Type: text/ plain ; charset=us-ascii
Content-Transfer-Encoding: 7bit
PHP さん、
私の馬、Bucephalus の血統表と写真を添付します
Alex
--XX-1234DED00099A
Content-Type : image/jpg;
name="buce.jpg";
Content-Transfer-Encoding:base64
Content-Description:「ブセファロスの写真」
<....base64 jpg>
--XX-1234DED00099A
Content-Type: application/octet-stream;
name="pedigree.doc"
Content-Transfer-Encoding: Base64
Content-Description: "偉大な馬の血統表"
<....Base64 encoded doc (pedigree.doc) of Bucepolus...>
--XX-1234DED00099A--
複雑そうですね。とにかく、詳細を見てみましょう:
MIME ヘッダーの Content-Transfer-Encoding が「7bit」であることに気づいた場合。 Content-Type は
multipart/mixed であるため、エンコーディングは 7 ビット、8 ビット、またはバイナリのいずれかである必要があります。7 ビットは広く使用されている形式です。
このようなメッセージにはさまざまな情報が含まれています。クライアント プログラムは、JPG 画像、ドキュメント、通常のテキストの違いをどのようにして認識するのでしょうか? Content-Type の後に、boundary="XX-1234DED00099A" パラメーターがあることがわかります。この値は、メールのさまざまな
部分を区切るために使用されます。これは MIME 境界タグと呼ばれます。メッセージ範囲を超えた場合の混乱を避けるために、境界タグの値はできる限り一意である必要があります。
「警告」メッセージ (翻訳者: 「これは MIME でエンコードされた
メッセージです」) は、MIME に準拠していないクライアント
がそれを表示できるようにするためのものであり、そうしないと空メールの意味が理解できなくなります。
さて、境界マーカーに戻ります。このシンプルなメールを観察すると、毎分境界マーク (XX-1234DED00099A) が表示されることに気づくでしょう
両方が表示されます。つまり、各パーツ間に境界マークが使用されますが、各境界マークは 2 つのコネクタで始まります。
最後の MIME セグメントの後、境界マークはこれら 2 つの端の文字で始まるだけでなく、
それらの文字で終わることに注意することが重要です。これはメッセージの範囲を定義するため、忘れてはなりません。
最初の 2 つの MIME セグメントを見てみましょう:
最初のセグメントは通常のテキスト メッセージなので、Content-Type は text/plain、エンコーディングは 7 ビットです (省略することもできます。
デフォルトでこのようにして)。
2枚目はJPEG画像です。対応する表現は Content-Type: image/jpg です。 name="buce.jpg" (パラメーターと呼ばれる
Content-Type の後に表示されます) は、ファイルの名前を示します。これは、クライアント プログラムで表示される添付ファイル
の名前です。 name="buce.jpg" が指定されていない場合、説明フィールド (指定されている場合) が添付ファイルの名前として表示されます (ただし、これはすべてのクライアントで均一ではありません)。
JPEG に注意してください
クライアント プログラムがインライン添付ファイルを表示できる場合は、電子メールに画像を表示できます。あるいは、添付ファイルをどのように表示するかをクライアントに指定することもできます。たとえば、
Content-Disposition: 添付ファイル ヘッダーが存在する場合、JPEG 画像が添付ファイル アイコンとして表示されます。