メールコンテンツを送信する際、「コンテンツ転送エンコーディング」ヘッダーを設定する必要があります。受け取ったメールのヘッダーを多数観察しました。 「7bit」を使用しているメールと「8bit」を使用しているメールがあります。
これら2つの違いは何ですか?どちらがお勧めですか?これらのヘッダーを設定するために、メール本文に特別なエンコードが必要ですか?
少し読みにくい場合がありますが、RFC 1341の「Content-Transfer-Encoding」セクションにはすべての詳細があります。
http://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
状況はちょっと悪くなります。私の要約は次のとおりです。
SMTPは、定義により(RFC 821)、メールをそれぞれ7ビットの1000文字の行に制限します。つまり、パイプに送信するバイトのいずれも、最上位(「最高位」)ビットを「1」に設定することはできません。
私たちが送りたいコンテンツは、本質的にこの制限に従わないことがよくあります。画像ファイル、またはUnicode文字を含むテキストファイルを考えてみてください。これらのファイルのバイトは、多くの場合、8ビット目が「1」に設定されています。 SMTPではこれが許可されていないため、「転送エンコード」を使用して、不一致の回避方法を説明する必要があります。
Content-Transfer-Encoding
ヘッダーの値は、この問題を解決するために選択したルールを説明しています。
7bit
は、単に「私のデータはUS-ASCII文字のみで構成され、各文字に下位7ビットのみを使用する」ことを意味します。基本的に、コンテンツのすべてのバイトがすでにSMTPの制限に準拠していることを保証しているため、特別な処理は必要ありません。そのまま読むことができます。
7bit
を選択すると、コンテンツのすべての行の長さが1000文字未満であることに同意することに注意してください。
コンテンツがこれらのルールに準拠している限り、7bit
は最適な転送エンコーディングです。余分な作業は必要ありません。パイプから出てくるバイトを読み書きするだけです。 7bit
コンテンツを目で見て理解するのも簡単です。ここでの考え方は、「平易な英語のテキスト」で書いているだけなら大丈夫だということです。しかし、それは 2005年には真実ではなかった であり、今日では真実ではありません。
8bit
は、「私のデータには拡張ASCII文字が含まれる可能性があります。8番目(最上位)ビットを使用して、標準US-ASCII 7ビット文字以外の特殊文字を示すことができます」 7bit
と同様に、1000文字の行制限がまだあります。
8bit
は、7bit
と同様に、実際にバイトがワイヤに書き込まれたり、ワイヤから読み取られたりするときに、バイトの変換を行いません。これは、どのバイトも最上位ビットが「1」に設定されないことを保証していないことを意味します。
これは7bit
からのステップアップのように思えます。コンテンツの自由度が高まるからです。ただし、RFC 1341には次の情報が含まれています。
このドキュメントの公開時点では、メール本文にエンコードされていない8ビットまたはバイナリデータを含めることが正当な標準化されたインターネットトランスポートはありません。したがって、「8ビット」または「バイナリ」のContent-Transfer-Encodingがインターネット上で実際に合法である状況はありません。
RFC 1341は20年以上前に発表されました。それ以来、 8bit MIME Extensions in RFC 6152 を取得しました。ただし、それでも行の制限が適用される場合があります。
この拡張は、SMTPサーバーが行の長さを制限する可能性を排除しないことに注意してください。サーバーはこの拡張を自由に実装できますが、それでも1000オクテット以上の回線長制限を設定します。
binary
は8bit
と同じですが、行の長さの制限がない点が異なります。引き続き任意の文字を含めることができ、余分なエンコードはありません。 8bit
と同様に、RFC 1341は、それが実際には正当なエンコード転送エンコードではないと述べています。 RFC 30BINARYMIME
でこれを拡張しました。
8BITMIME
拡張の前に、SMTPで7bit
にできないコンテンツを送信する方法が必要でした。 HTMLファイル(1000文字を超える行がある場合があります)および国際文字を含むファイルは、この良い例です。 quoted-printable
エンコーディング(RFC 1341のセクション5.1で定義)は、これを処理するように設計されています。次の2つのことを行います。
Quoted Printableは、エスケープと短い行のため、7bit
または8bit
よりも人間が読むのがはるかに困難ですが、可能なコンテンツの範囲がはるかに広くなっています。
データの大部分が非テキスト(例:画像ファイル)である場合、多くのオプションはありません。 7bit
はテーブルから外れています。 8bit
およびbinary
は、MIME拡張RFCの前はサポートされていませんでした。 quoted-printable
は機能しますが、実際には非効率的です(各バイトは3文字で表されます)。
base64
は、このタイプのデータに適したソリューションです。 3つの未加工バイトを4つのUS-ASCII文字としてエンコードしますが、これは比較的効率的です。 RFC 1341は、base64
- encodedデータの行の長さをSMTPメッセージ内に収まるように76文字にさらに制限していますが、固定長で任意の文字を分割または連結するだけの場合は、比較的簡単に管理できます。
大きな欠点は、base64
でエンコードされたデータは、たとえその下にある「プレーン」テキストであっても、人間にはほとんど読めないことです。