【PHP】メール送信で自動改行されて文字化けする
事象
一行にある程度文字を入れて送信したとき、文字化けが発生する。
原因
1行に1000バイト入った状態だと、メール送信サーバーが改行を入れるため。
詳細
インターネット通信規格RFCというインターネットの仕様をまとめてある文書があります。
その中で、メールは1行1000バイトまでと決められているそうです。
なので、1行に1000バイト入っていたら、文字コードの考慮なく改行コードが入り、そこで文字化けが発生してしまうということです。
まぁ1行に1000バイトも入れることは早々ないと思いますが..
解決策
適度に改行を入れてあげるしかないと思います。
PHPには指定した文字数で、指定した文字で区切るwordwrap関数というものがあるので、それを使って区切ってあげてもいいと思います。
ただ、この関数はマルチバイトに対応していないので、日本語の文字列を区切ることに使うのは難しいかも。
色んな方がマルチバイトに対応させたwordwrap関数を作ってくださっているので、検索すれば色々出てくると思います。
参考サイト
1行1000バイトを超えると文字化けするメール | Points & Lines
PHP: wordwrap - Manual
[PHP]マルチバイト対応のwordwrapが無いから作った - Qiita
マルチバイト文字対応のwordwrap()|php|STEP UP BLOG