追記
なにやらOSと異なる改行コードにすると、そもそもSMTP上にLFとかが出てしまうようで、SMTPサーバーによってはエラー応答で切断されたり、エラーにはならなくても変な文字化けになったりするようだ。
結論としては、文字列中の改行コードは、PHP_EOL
に統一しなければならないと言うことのようだ。
PHPのメール送信ライブラリ、Swift Mailerでメール本文の末尾に謎の2文字(化けた感じの)が混入する現象に遭遇した。
詳しくは検証していないが、発生する条件に以下のようなものがあった。
- メールがISO-2022-JP、7bit、プレーンテキスト(日本語JISテキストメール)。
-
Swift_SmtpTransport
を使用している。 - PHPをWindows環境で実行している。(
PHP_EOL
がCR+LF) - メール本文文字列の改行コードがLF。
- 発生していない状態でメール本文を1行増減すると発生する。(逆だと発生しなくなる。)
- 発生していない状態でメールヘッダのFrom、To、Subjectで折り返し行数が1行増減すると発生する。(逆だと発生しなくなる。)
解決方法としては、メール本文文字列の改行コードをPHP_EOL
と一致させると言うものになる。
どのOSでも問題ないようにするには、改行コードをPHP_EOL
に統一する置換処理が必要と思われる。
内部処理にPHP_EOL
に依存する置換処理がある模様。
具体的に何が混入しているのかは検証していないが、JISの切り替えコードとか、SMTPに乗せるとき特有の問題かも知れない。
うっかりメール本文をヒアドキュメントで書いて、さらにソースコードを改行コードLFで保存してしまったために、この現象に遭遇した。
同じような文字化けをどこかのサービスでも見かけた気がするので、同じような問題があるのかも知れない。