メール本文が一行1000バイトを超えると文字化ける問題
sendmail、qmail、Postfixで送信するメールで一行あたり1000バイトを超えると、自動で改行コードが挿入される問題。
マルチバイト文字列とか全然考慮されないまま改行コードが挿入されるらしく、それが原因で日本語が文字化けてしまう。
上記のMTAに限らずどのMTAでもだいたいそういう仕様になってるっぽい。
RFCのドキュメントにも、一行1000バイト超えたメール本文を作っちゃだめだよーって明記されている。
ので、おとなしくアプリケーション側で長い行に対して改行文字を差し込む。
以下、長い行に改行文字を入れるPHPのメソッド書いた。
function _preventGarbledCharacters($bigText, $width=249) {
// wordwrap()はマルチバイト未対応のため正規表現を使う。
$pattern = "/(.{1,{$width}})(?:\\s|$)|(.{{$width}})/uS";
$replace = '$1$2' . "\n";
$wrappedText = preg_replace($pattern, $replace, $bigText);
return $wrappedText;
}
これで強制改行が原因の文字化けは無くなるはず。
参考
http://srgia.com/docs/rfc2822j.html#p2.1.1
http://www.geek.sc/archives/743
https://siiz.biz/memo/detail.php?id=70
Author And Source
この問題について(メール本文が一行1000バイトを超えると文字化ける問題), 我々は、より多くの情報をここで見つけました https://qiita.com/saekis/items/7ef6b0d6a9a7180e3ebe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .