php でメールを送る、mb_send_mail の件名文字化け

PHPでメールを送るときには、mb_send_mail が使える。

// 文字コードの設定、日本語UTF-8
mb_language("ja");
mb_internal_encoding("UTF-8");

$toaddr = "toaddress@example.com";  // 宛先
$subject = "件名";                                   // 件名
$mailbody = <<< EOFMB                       // 本文
$name 様

メール本文を記述、ヒアドキュメントで変数も使用できる。
EOFMB;
$fromaddr = "From:" . mb_encode_mimeheader ("名前") .  "from@example.com";

// $subject = mb_convert_encoding ($subject, "iso-2022-jp", "UTF-8");
$mailbody = mb_convert_encoding ($mailbody, "iso-2022-jp", "UTF-8");

mb_send_mail ($toaddr, $subject, $mailbody, $fromaddr);

さらに修正:


mb_language("ja");

mb_internal_encoding("UTF-8");


が設定してあれば、本文に関しても文字コードの変換は必要ないようだ…


141226修正:


php文字コードUTF-8 の場合メール本文は mb_convert_encoding で文字コードを変換する必要があるが、Subject については文字コードの変換なしで mb_mail_send に投げつけてしまっていいようだ。


逆に Subject を mb_convert_encoding で変換してしまうと9文字目で文字化けが発生するという原因になる。


予想外。


ただこれ、件名が9文字を超えるとそこで文字化けする。

対処方法としては9文字で区切って、変換してつなげるという方法がある様子。

http://iteahelper.com/blog/2013/04/03/php%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E3%80%80%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E9%80%94%E4%B8%AD%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%81%AB%E3%81%A4%E3%81%84/