2013年6月12日水曜日

mb_send_mail()でメールの件名が文字化けする場合

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

mb_send_mail()でメールを送信する際に、
たまに受け取るメーラーによっては日本語の文字化けが起きてしまう問題がある。
特に件名だけが文字化けしているとか、
Gmailだと見れてるのにここのメールサーバ使うとみたいな。
ということでmb_send_mail()の正しい使い方を書いてみた。

$charset = "iso-2022-JP";
mb_language("ja");
mb_internal_encoding("utf-8");

$to = "hogehoge@hogehoge.com";
$subject = "タイトルですよ";
$body = mb_convert_encoding("本文になります",$charset,"AUTO");
$from = array("name" => "foo","mail" => "bar@bar.com");

$headers = "Mime-Version: 1.0\n";
$headers .= "Content-Transfer-Encoding: 7bit\n";
$headers .= "Content-Type: text/plain;charset={$charset}\n";
$headers .= "From: ".mb_encode_mimeheader($from["name"])." <".$from["mail"].">";

mb_send_mail($to,$subject,$body,$headers);
これで無事に文字化けせずに送れる。
特に重要なのは下記の二つ。
mb_language("ja")
mb_internal_encoding("utf-8");
mb_send_mail()は自動的に日本語文字を変換してくれる機能を持っているので、
ちゃんと文章が日本語でutf-8ですよと宣言してあげれば大丈夫。
宣言してないと件名だけ文字化けしてしまうという問題が起きてしまったりする。

といってもそもそもフレームワーク導入すればメール送信なんて一発だし、
わざわざそんな面倒な事を考える必要もないわけだし。
でも小さい案件だったらフレームワーク入れる必要もないわけだし。

つまりフレームワーク入れれる案件はちゃんと入れましょうということだと思います。

Adsense