PHPメール送信 ヘッダの日本語エンコード方法は?


下記スクリプトでメール送信すると、
From:
To:
が文字化けします。
普通はどうやって解決するのでしょうか?

<?php
$header = ’From: 菅山かおる <kaoru@bihaku.com>’;
$to = ’ファンの皆様 <fun@mina.sama>’;
$subject = ’応援してね’;
$r = mb_send_mail($to, $subject, $message, $header);
?>

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/07/15 13:54:53
  • 終了:--

回答(2件)

id:nalchin No.1

nalchin回答回数12ベストアンサー獲得回数02005/07/15 14:46:36

ポイント10pt

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 ”メール送信失敗”;

}


?>

id:Keiichiro No.2

Keiichiro回答回数84ベストアンサー獲得回数02005/07/15 14:19:54

ポイント80pt

上記URLからの引用です。


============================

見事に件名と本文は日本語表示が正しく行えています。

送信者のところは、日本語を使用すると期待通りに化けてくれますが・・・ 。


fromヘッダやtoヘッダに日本語が含まれていると、その部分をJIS変換+エンコードしてやる必要がありますから、これはmb_encode_mimeheader関数の出番です。mb_send_mailもここまでは面倒見てくれません。


wp-contactform.phpの120行目(wp-contactform日本語版の場合)を以下のように書き換えました。


$headers = “From:” .mb_encode_mimeheader($name).” < $email>¥n”;


再度、送信者に日本語を使ったテストメールを発射してみると今度は、すべて文字化けせずに表示できました。

===================================

id:radio3

ばっちりです!ありがとうございました。

2005/07/15 14:52:00

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません