要約
- SendGridでWebAPIを用いた送信をする場合、文字コードはUTF-8のみ対応している
- SendGridでSMTPを用いた送信をする場合、文字コードはUTF-8以外にISO-2022-JPも対応している
- 但し、UTF-8の形に変換されてから送信される
- メールのヘッダー情報のcharsetもUTF-8になる
- SendGridでISO-2022-JPを用いて送る場合、「①」「㈱」などといったJIS X 0208より後に追加された文字は文字化けを引き起こす恐れがあるため避ける
ISO-2022-JPで送ると文字化けしてしまった
元々ISO-2022-JPでエンコードしていたメールがあり、SendGridを用いて送信する様に変更しました。
届いたメールを確認すると文字化けをしていました。
元々送ろうとしていたメールは「①」という文字が使われており、その部分が文字化けしてしまいました。
原因の調査
まず、WebAPIを用いてメールを送信する場合はUTF-8以外の文字コードには対応していません。
そのため、メールを送信する際にWebAPIを用いていないか確認する必要があります。
参考記事 Web APIでUTF-8以外の文字コードでメールを送信することはできますか?
今回はSMTPで送っていたのでそちらはどうか確認した結果、「ISO-2022-JP」の文字コードは対応と記載がありました。
他にも「Content-Transfer-Encodingに8bitを指定していないか」「改行文字がCRLF以外になっていないか」などの注意点はあったものの、いずれも問題ありませんでした。
参考記事 SMTPでメールを送信する際に気をつけることはありますか?
確認した結果
ISO-2022-JPでエンコードしたメールをSendGridが送信する前に、ISO-2022-JPからUTF-8に変換する処理を行っていることが分かりました。
そのため、ISO-2022-JPでエンコードしたままのメールをSendGridで送ることはできません。
対応策
UTF-8でエンコードして送信する
そもそもの話としてUTF-8で最初からエンコードしていればSendGrid側での変換を考慮せずメールを送ることが可能です。
UTF-8にエンコードした際に文字化けする文字を利用しない
ISO-2022-JPを用いた場合ですが、JIS X 0208までに定義された文字であれば問題なさそうです。
それ以降に定義された文字(①、㈱、アイウエオなどの半角カナ)はUTF-8への変換時に文字化けする可能性があるため極力避けることを推奨します。