memocon プログラミングのメモや物欲日記、雑記等

PHPで送ったメールをOutlookで確認するとヘッダが本文に表示されたり改行が倍になったりする

2014年01月24日 19時53分

サーバ環境が変わったとたんに秘伝のソースプロジェクトから送られたメールをOutlook(報告があったのは2003,2007)で確認すると本文中にメールヘッダが出てきたり、本文中の改行が2倍になったりする症状が発生した。

こんな感じ。

mail

環境の違いはガッツリ変わっててMTAがsendmailからpostfixに変更。
また、phpのバージョンが5.1から5.5になった。

調べてみるとやっぱり同じ症状に悩む人が結構いたらしくすぐ情報が見つかる。
共通して言ってることはqmailやpostfixの場合は改行コードを統一しないとまずいということ。

LFに統一したらすぐ治ったが全くの思い込みでドハマリしたのがヒアドキュメント中の改行コード。

今までコード中の改行コードがそのまま反映されるものと思っていたがどうもPHP_EOLになる挙動をする。

Windows(Win7, Apache2.2, PHP5.5)で確認すると改行は全てCRLFで思った通りの改行コードになっている。

しかし、Linux(CentOS6.5, Apache2.2, PHP5.5)で確認すると変数に入れた\r\nのみCRLFで、ヒアドキュメント中の改行は全てLFになっていた。

こうなるとMTA側でLFをCRLFに変換した時にCRCRLFという改行コードができてメーラーによってマチマチの挙動になっていたと納得。

後、注意すべき点としてはmb_encode_mimeheaderも長い場合は自動で改行するので引数渡して改行コードを指定し、本文の改行コードと合わせる必要がある。

PHP: mb_encode_mimeheader
http://www.php.net/manual/ja/function.mb-encode-mimeheader.php