SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

phpからメールを送ると、改行がなくなったり、改行が増えたりする件

php から送信したメールを Outlook で受信すると、改行がなくなってるんだけど!
という問題について。

たぶんMTAにqmailを使っている人に見られる問題じゃないかなと思います。
そして、phpから送ったときに限った問題でもないです。

メールに絡むプロトコルの POP3、SMTPでは、改行は CR+LF にしてくれと RFC にあるのですが、qmailは、内部では 改行を LF で扱い、送受信の過程で中途半端に変換してくれるため、事件が起きているようです。

メールの文面がこのようになっているとき(Windowsでごく普通のエディタで書くとこうなる)
……………………
あいうえおCRLF
かきくけこCRLF
さしすせそ
……………………

こんなふうになって届きます
……………………
あいうえおCRCRLF
かきくけこCRCRLF
さしすせそ
……………………

CRCRLFを目で確かめたい方は、該当のメールをphp などで、1文字ずつASCIIコードに変換して見るか、 ダンプビューワみたいなソフトで見ると 0D 0D 0A (16進表示)となっている様子が見えます。

これを受信した側が、どのように表示するかですが、
・ OutlookExpress ならとても普通に見えます。
・ Outlook だと、改行がなくなって見えます。
・ gmail などでは、改行が増えて見えます。

<対処方法>
文面を修正します。

改行コードが不明な状況なら、こんな感じで補正します。

$s = str_replace(array("\r\n", "\r"), "\n", $s);

メールの文面がこうなっていれば
……………………
あいうえおLF
かきくけこLF
さしすせそ
……………………

こんなふうに届きます
……………………
あいうえおCRLF
かきくけこCRLF
さしすせそ
……………………

めでたしめでたし。

関連するメモ

コメント