sendmail、qmail、Postfixで改行なし長文メールで文字化けする問題の解決法

1000バイトを超える改行なしメールは送信できない

RFC2821によって、1000バイトを超えるメールに関しては以下の制限があります。

このため、sendmailであれ、qmailであれ、Postfixであれ、どのMTAでメールサーバーを構築しても1000バイトを超えるメールを送ろうとすると強制改行が入り、日本語などマルチバイト文字列を使っている場合は、改行が挿入された場所によっては文字化けが発生します。

解決策

RFCではSMTPサービス拡張により修正されても良いという書き方をしていますが、現在、この解決策を採用しているMTAはありません。そのため、もしスクリプトなどで1000バイトを超える未改行の文字列を受け取り、それをメール送信したいと思うならば、文字コードに合わせて適切な場所で改行を挿入するべきです。以下、Perlで各文字コード別に解決策を列挙します(参考:sendmail が勝手に改行コードを挿入する件)。

UTF-8での対策

 

EUC-JPでの対策

Shift-JISでの対策

picture_large4-87311-188-9

1 個のコメント