web-dev-qa-db-ja.com

メールの添付ファイルEOL(行末)の問題

Windowsで簡単なメールを送信していますXP 4つの添付ファイル付き:

  • ダミー.txt(行末:CRLF)
  • ダミー.xml(行末:CRLF)
  • dumpimjustlf.txt(行末:LF)
  • dumpimjustlf.xml(行末:LF)

クライアントによると、私は行末が変更されたメールを送信しています:

  • Outlook '07: EOLは変更されていません
  • Thunderbird 3:ダミージャストルフ.txtのEOLがCRLFに変更され、その他は変更されていません
  • Java Mail: damyjustlf.txtとdummyjustlf.xmlのEOLがCRLFに変更され、その他は変更されていません

この動作はどのように指定されていますか?これを文書化したRFCはありますか?クライアントは、添付ファイル付きのメールを送信する方法または受信する方法を決定し、EOLを希望どおりに変換しますか?

2
timbooo

おそらく、実行している電子メールクライアントとプラットフォームの組み合わせです。

理想的には、添付ファイルは常に同じである必要があり、ファイルがバイナリである(または.Zipなどのバイナリコンテナに入れられている)場合は問題はありません。

私が起こっているのは、クライアントアプリケーションが、Base64(バイナリファイルがエンコードされる)ではなく、「quotedprintable」エンコードの添付ファイルとしてプレーンテキストメッセージを挿入していることです。これを確認するには、受信メールアプリで生のメッセージデータを表示する必要があります。

  • Gmailでは、これは右上の[返信]ボタンの横にあるメニューの[オリジナルを表示]です。
  • Thunderbirdで、[表示]-> [メッセージソース]
  • OutlookとJavaメール)にはおそらく同等のものがあります。

次のようなヘッダーで始まる添付ファイルを探す必要があります。

--0016e65c71b2a252eb04a3a1f642
Content-Type: text/plain; charset=US-ASCII; name="test.txt"
Content-Disposition: attachment; filename="test.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gnvt3nlf0

「Content-Transfer-Encoding」が「base64」以外のもの(「quoted-printable」など)であり、以下のテキストファイルのテキストコンテンツを確認できる場合は、それがエラーの原因である可能性があります。エンディングは、メッセージが送信されるときに送信アプリによって正規化される可能性があります(ほとんどの電子メールはプレーンテキストとして送信されます)。

Base64エンコーディングは、バイナリファイルをプレーンテキストに変換します。プレーンテキストは、送信者が送信し、受信者で再びバイナリに変換できます。プレーンテキスト主導の電子メールの世界に混乱することはありません。これはおそらく、Outlookがすべての添付ファイルに対して実行していることであり、TBが.xmlファイルに対して実行していることです。

4
Spectre