こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP の mb_send_mail で HTMLメール送信

mb_send_mailでHTMLメールを送信すると
受信メールのヘッダ情報が勝手に追加されてしまいます。

【PHP内で指定しているヘッダ】
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-2022-jp' . "\r\nX-Mailer: PHP/".phpversion();

【受信メールのヘッダ情報】
Mime-Version: 1.0
Mime-Version: 1.0
Content-Type: text/html; charset=iso-2022-jp
Content-Type: text/plain; charset=ISO-2022-JP
というように、指定もしてないContent-Type: text/plainが
追加されたり、Receivedも同じように勝手に追加されてしまいます。

考えられる原因を教えていただけますか?

投稿日時 - 2009-05-18 16:47:46

QNo.4969518

すぐに回答ほしいです

質問者が選んだベストアンサー

mb_send_mail()は、細かいエンコーディングの調整ができないので、どうしても文字化けしがちです。
なので、件名や本文など、日本語が入る項目を個別にエンコーディング変換してからmail()関数に渡すのがオススメです。面倒ですが。
色々試した結果、下記のようにしたら文字化けはなくなりました。(もしかしたら、余分なものもあるかも知れませんが)

1. FROM
日本語名の部分をISO-2022-JPに変換、アドレス部分を追加してからMIME変換

2. SUBJECT
ISO-2022-JPに変換してからBase64に変換

3. 本文
ISO-2022-JPに変換

各変換は下記の関数を使いました。

ISO-2022-JPへの変換
  →mb_convert_encoding()

Base64への変換
  →base64_encode()

MIMEへの変換
  →mb_encode_mimeheader()

投稿日時 - 2009-05-18 17:39:51

お礼

ありがとうございます。

教えていただいた方法で試した結果、
本文は、バッチリ文字化けが解消されました。

FROMは日本語を使わなかったので、まだ試してません。
SUBJECTは文字化けが起こってしまったのですが、
mb_encode_mimeheader($subject, "ISO-2022-JP", "Q")にしたら
解決しました。

おかげで勉強になりました。
ありがとうございます!

投稿日時 - 2009-05-18 18:37:33

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

なんともいえませんが、mail()コマンドでもおなじ症状ですか?

投稿日時 - 2009-05-18 17:03:14

お礼

ありがとうございます。
mail()だと上記のような現象は起きないのですが、
日本語が件名、本文ともに文字化けしてしまいます。
文字化けしないのであれば、mail()でももちろん構いません。
文字化け解除に断念して、mb_send_mail にしました。

投稿日時 - 2009-05-18 17:07:16

あなたにオススメの質問