2021-06-06
PHPのフォームからメールを送信すると、環境によって改行数が違う
開発環境でフォームを作成、メールを送信した際には問題なかったが、本番環境にアップして動作確認すると、テキストエリアの改行が2倍になるという現象が発生した。
改行増える問題、その現象
テキストエリアに下記のように記入した場合、
あいうえお
かきくけこ
さしすせそ
受信時にメ-ルを確認すると、下のような記載になってしまう。
改行は行っているが、余分な行は空いていないにも関わらずです。
あいうえお
かきくけこ
さしすせそ
調べてみると、SMTPサーバのMTAが原因のようです。送受信の際に改行コードに何らかの変換が行われているようで、場合によっては、改行が増えるのではなく、減ってしまう場合もあるようです。
また、PHPのアプリケーション経由でメールを送信した場合に限った話ではない、との記述も見かけました。
解決方法
本来はメールサーバの設定等で調整・解決すべき内容なのかもしれませんが、あまり詳しくないので、アプリケーション側で対応することとしました。
$text = str_replace(array("\r\n", "\r"), "\n", $text);
全ての改行を\r
に統一。CRLFもCRもLFへ変換し解決しました。