下記スクリプトでメール送信すると、
From:
To:
が文字化けします。
普通はどうやって解決するのでしょうか?
<?php
$header = ’From: 菅山かおる <kaoru@bihaku.com>’;
$to = ’ファンの皆様 <fun@mina.sama>’;
$subject = ’応援してね’;
$r = mb_send_mail($to, $subject, $message, $header);
?>
http://php.s3.to/man/function.mb-send-mail.html
mb_send_mail
URLはダミーです。
基本は、
文字列を mb_convert_encoding() でSJIS変換
文字列を mb_encode_mimeheader() でMIME変換
その後、メール送信ですが
> ヘッダと メッセージは mb_language()の設定に基づき変換、 エンコードされます。
となっているので、
mb_send_mail()関数 の前に
mb_language()関数で言語の設定が必要かもしれません。
それと、mail()関数 の注意事項で
> to引数には ”Something <someone@example.com>” の形式の
> メールアドレスを与えることはできません。
となっているので、to ではなく
ヘッダで送信者のアドレスを追加しておく必要がありそうです。
(例)
<?php
$to = NULL;
$ToName = ’ファンの皆様’;
$ToMail = ’fun@mina.sama’;
$FromName = ’菅山かおる’;
$FromMail = ’kaoru@bihaku.com’;
$subject = ’応援してね’;
$message = ’メール本文’;
// 念の為、言語と文字コードの設定
mb_language(”Japanese”);
mb_internal_encoding(”SJIS”);
mb_detect_order(”ASCII, JIS, UTF-8, EUC-JP, SJIS”);
// To を変換
$ToName = mb_encode_mimeheader(mb_convert_encoding($ToName,’JIS’,’auto’));
$header .= ’To: ’.$ToName.’ <’.$ToMail.’>’.”¥n”;
// From を変換
$FromName = mb_encode_mimeheader(mb_convert_encoding($FromName,’JIS’,’auto’));
$header .= ’From: ’.$FromName.’ <’.$FromMail.’>’.”¥n”;
// メール を送信
$r = mb_send_mail($to, $subject, $message, $header);
if($r) {
echo ”メール送信成功”;
}else{
echo ”メール送信失敗”;
}
?>
上記URLからの引用です。
============================
見事に件名と本文は日本語表示が正しく行えています。
送信者のところは、日本語を使用すると期待通りに化けてくれますが・・・ 。
fromヘッダやtoヘッダに日本語が含まれていると、その部分をJIS変換+エンコードしてやる必要がありますから、これはmb_encode_mimeheader関数の出番です。mb_send_mailもここまでは面倒見てくれません。
wp-contactform.phpの120行目(wp-contactform日本語版の場合)を以下のように書き換えました。
$headers = “From:” .mb_encode_mimeheader($name).” < $email>¥n”;
再度、送信者に日本語を使ったテストメールを発射してみると今度は、すべて文字化けせずに表示できました。
===================================
ばっちりです!ありがとうございました。