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
さしすせそ
……………………
めでたしめでたし。
コメント