LoginSignup
2
2

More than 5 years have passed since last update.

Swift Mailerで本文の末尾が文字化けする現象について

Last updated at Posted at 2015-01-18

追記

なにやら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で保存してしまったために、この現象に遭遇した。

同じような文字化けをどこかのサービスでも見かけた気がするので、同じような問題があるのかも知れない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2