2015年9月17日木曜日

fuelphpで日本語メールを送る際に文字化けしてしまう問題を、文字数云々問わず解決する的なお話

  • このエントリーをはてなブックマークに追加

随分前にfuelphpでメールを送る際に文字化けしてしまうみたいな記事を書いたけど、結局のところタイトルの文字数を短くすればっていうよくわからない解決方法になった。
けど、そんなんじゃちょっと微妙だよねと思うわけで。

で、今回はそれをちゃんと解決しましょう的な方法を見つけたのでそのお話をば。

ちなみに今回の話はamazon-sesをdriverとして使ってようが、何を使ってようが当てはまるであろうお話。

$sendmail = \Email::forge(array(
  "driver" => "ses",
  "charset" => "jis",
  "encoding" => "7bit",
  "encode_headers" => false
))
->to('hoge@hoge.com')
->from('from@hoge.com',"from address")
->subject('メール文のタイトルだけどかなり長めに書いてみたけどどうでしょう的な')
->alt_body('本文');
重要なのがencode_headersというパラメーター。
メールのcoreクラス内でこれが付いていると自動的にメールのタイトルと送信者名がエンコードされてしまう。
そうするとこちらで指定しているcharsetと変わってしまうのかよくわからないけど、タイトルがある一定以上の長さの場合文字化けてしまう。

ってことでこれを指定してあげれば無事に文字化けしないで日本語メールもちゃんと送れるよ的な。
大体のサイトでは文字化けcharsetとencodingを指定してあげればOKとなっているけど、長さについてはちゃんと話をしていなかったり。
とりあえずこの1行入れれば解決出来るのでどうぞ的な。

Adsense