2010年1月15日金曜日
PHPでメールを送るけど、Beckyだけが…

PHPでサイト構築しました。
メールを送るんだけど、まぁこんなカンジ。
抜粋ね。

mb_language('ja');
mb_internal_encoding('UTF-8');
$admin_name = mb_encode_mimeheader($admin_name, 'UTF-8');
$mail_header = "From: ".$admin_name." <".$admin_mail.">\r\n";
$mail_header .= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
$mail_header .= "Content-Transfer-Encoding: 7bit";
mb_send_mail($mail, $subject, $body, $mail_header);


mb_language()とかmb_internal_encoding()とかは冗長かとは思ったんだけど、改めて指定してみた。

問題は$admin_nameなんだな。
要するに送信者名を日本語で設定したいというので、mb_encode_mimeheader()を使うことになった。

色々とテストしてみると、何故かBecky!だけが化ける。
いくつかのケータイとiphone、Windows Live Mailで試したけど、問題なし。
Becky!だけが問題。

受信メールの一覧、メールのプロパティでは正常に表示されている。
しかしメールを表示する際のミドルバー上の差出人とヘッダ表示ではまともに表示できていない。

試しに返信してみると、宛先の日本語表示は正しい。

色々調べるが、有効な情報は見つからない。

まぁ、Becky!はクセがあるみたいだしなぁ…


じゃ、僕のコードがまずいんだろうなってことで、Content-Typeを消してみたり、Content-Transfer-Encodingを消してみたり色々試したが一向に改善されない。

改めてphpinfo()を確認するが、mb_internal_encodingはUTF-8である。


結論はこれ。
$admin_name = mb_encode_mimeheader($admin_name, 'UTF-8');


ここで指定している'UTF-8'を外すと、Becky!でも正常に表示されました。

$admin_name = mb_encode_mimeheader($admin_name);


$admin_nameで指定している文字コードもUTF-8だし、改めて指定する必要もないかな??
一応Windows Live Mailでも正常に受け取れたし…

なんだったんだろう?
全然ワカラン。

実は根本的なことが判ってないのかも。



0 コメント | コメントを書く
Template Design: © 2007 Envy Inc.