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文字で区切って、変換してつなげるという方法がある様子。