2021-06-06

PHPのフォームからメールを送信すると、環境によって改行数が違う

PHPに関する記事

開発環境でフォームを作成、メールを送信した際には問題なかったが、本番環境にアップして動作確認すると、テキストエリアの改行が2倍になるという現象が発生した。

改行増える問題、その現象

テキストエリアに下記のように記入した場合、

あいうえお
かきくけこ
さしすせそ

受信時にメ-ルを確認すると、下のような記載になってしまう。
改行は行っているが、余分な行は空いていないにも関わらずです。

あいうえお

かきくけこ

さしすせそ

調べてみると、SMTPサーバのMTAが原因のようです。送受信の際に改行コードに何らかの変換が行われているようで、場合によっては、改行が増えるのではなく、減ってしまう場合もあるようです。

また、PHPのアプリケーション経由でメールを送信した場合に限った話ではない、との記述も見かけました。

スポンサーリンク

解決方法

本来はメールサーバの設定等で調整・解決すべき内容なのかもしれませんが、あまり詳しくないので、アプリケーション側で対応することとしました。

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

全ての改行を\rに統一。CRLFもCRもLFへ変換し解決しました。