PHP
SendGrid
cakephp3

SendGridで改行が消えた/増えた場合の対応

改行が消えている場合

原因

SendGridのデフォルト設定ではプレーンテキストを自動的にHTML化するようになっており、変換時に改行コードが削除されてしまう。

対策

SendGridにログインして、「Setting」→「Mail Settings」→「Plain Content」をONにして”INACTIVE”から”ACTIVE”に変更すればプレーンテキストのまま送信するようになる。

改行が増えている場合

原因

SendGridの設定を変更してプレーンテキストで送信するようにしても、CakePHP3のEmailクラスを利用してメール送信すると1つの改行が2つに増えてしまう事象が発生した。

今回はcharsetを"UTF-8"として送信したいのだが、Emailクラスではcharsetが"UTF-8"の場合にはContent-Transfer-Encodingを"8bit"とするようになっている。

SendGridのサポートページによると、

歴史的経緯から、メールサーバの中には7bitエンコードしか扱えないものが存在します。このため、Content-Transfer-Encodingに8bitが指定された場合、SendGrid側で自動的にquoted-printableに変換します。この際、余分な改行が追加される場合があります。

とのことでこちらの事象が発生している。

対策

Emailクラス自体には本文のエンコード方法(=Content-Transfer-Encoding)を変更する手段がなさそうなので、こちらの記事を参考にbase64でエンコードするクラスを別途用意してそちらを使う事で解決が出来た。