PHPのmb_send_mailでHTMLメール送信の問題

このQ&Aのポイント
  • PHPのmb_send_mailを使用してHTMLメールを送信すると、受信メールのヘッダ情報が勝手に追加される問題が発生しています。
  • 送信するメールのヘッダ情報は適切に指定しているにもかかわらず、受信メールに勝手にContent-Type:text/plainなどが追加されてしまいます。
  • 原因として考えられるのは、mb_send_mail関数の仕様や設定の問題です。具体的な原因を特定するには、より詳細な情報が必要です。
回答を見る
  • ベストアンサー

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も同じように勝手に追加されてしまいます。 考えられる原因を教えていただけますか?

  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • hegemon
  • ベストアンサー率72% (21/29)
回答No.2

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()

fufukuku
質問者

お礼

ありがとうございます。 教えていただいた方法で試した結果、 本文は、バッチリ文字化けが解消されました。 FROMは日本語を使わなかったので、まだ試してません。 SUBJECTは文字化けが起こってしまったのですが、 mb_encode_mimeheader($subject, "ISO-2022-JP", "Q")にしたら 解決しました。 おかげで勉強になりました。 ありがとうございます!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

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

fufukuku
質問者

お礼

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

関連するQ&A

  • HTMLメールを送信するには

    PHPからHTMLメールを送信する際の追加ヘッダーに書くべき内容について教えてください。 $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; multipart/alternative; charset=Shift_JIS\r\n"; mail($to, $subject, $message, $headers); として発信してますが 一部の受信側でTXTに化けてしまいます。 どなたか、HTMLメールの追加ヘッダーの書き方を教えていただきたいのですがよろしくお願いいたします。 5/11 usagi_024

    • 締切済み
    • PHP
  • mb_send_mailについて

    mb_send_mailにてメール送信をしようとしています。 mb_send_mail(宛先, タイトル, メール内容, 送信者) として送信するのですが、メールの内容に以下のヘッダー情報が付加されてしまいます。 aaa@bbb.com Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit ~以下メール内容~ これらを表示させない方法は無いのでしょうか?

    • 締切済み
    • PHP
  • PHPからのHTMLメール送信

    PHP覚えはじめの初心者です。 下記のソースで自分宛にメールを送信すると、 会社のメールアドレスではHTMLメールとして受取れるのですが、 その他のメールアドレス(DION、ロリポップ、infoseek)、などでは 普通のテキストメールとしてソースが出てしまいます。 他にも何かヘッダーに付加したほうがいいのでしょうか? コツがありましたらご教授ください。 よろしくお願い致します。 <?php /* 送信先 */ $to = "hoge@hoge.com"; /* 題名 */ $subject = "HTML MAIL"; /* メッセージ */ $message = ' <html> <head> <title>テスト</title> </head> <body> <h1>テスト</h1> </body> </html> '; /* ヘッダー */ $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-2022-jp\r\n"; $headers .= "Content-Transfer-Encoding: 7bit\r\n"; $headers .= "From: hoge@hoge.com\r\n"; mail($to, $subject, $message, $headers); ?>

    • 締切済み
    • PHP
  • PHPから携帯へメール送信

    いつもお世話になっております。 PHPから携帯電話へ"絵文字付き"でメールを送るプログラムを作成している のですが、『base64_encode』等を使用して絵文字の表示までは行う事がで きました。 ですが、本文が途中で途切れてしまうのです・・・。 PHP側は、 $to = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), 'SJIS', 'ISO-2022-JP'); $subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), 'SJIS', 'ISO-2022-JP'); (省略)  ・  ・ $body = $structure->body; $body = preg_replace('/\s*>\s.*/', '', $body); $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); //---------------------------------- // base64_encode //---------------------------------- $subject = "=?shift_jis?B?" . base64_encode($subject) . "?="; $body = base64_encode($body); //---------------------------------- // ヘッダを作成 //---------------------------------- $headers = "From: test@mail.com\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=Shift-JIS\n"; $headers .= "Content-Transfer-Encoding: base64"; //---------------------------------- // メール送信 //---------------------------------- $res = mail($to, $subject, $body, $headers);  ・  ・ (省略) 上記のように記述しています。 メールは送れます。絵文字も表示されます。ですが、本文が途中で途切れ てしまいます。 どなたかご教授をお願い致します。

    • ベストアンサー
    • PHP
  • lolipopのメールをPHPでおくると変な文がはいる

    lolipopのメールをPHPでおくると変な文がはいるんです。 =?ISO-2022-JP?B?GyRCITwlRyUjJXMlMBsoQkRJVklORSBTVEFS?=<> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Message-Id: <20090708192452.657E59FD1B@users001.phy.lolipop.jp> Date: Thu, 9 Jul 2009 04:24:52 +0900 (JST) 届いたメールにこんな文がはいっていますが、 これはどうしたら入らないようになるのでしょうか?

    • 締切済み
    • PHP
  • SoftBankにメール送信できない

    タイトル通り、メール送信できなくて悩んでおります。 PCメール、フリーメール(yahoo)、docomoメールなどで送信できることを確認できましたが、Softbankのみ送信ができない状態となっております。現在のヘッダー情報は下記の通りとなっております。 MIME-Version: 1.0 Content-Type:text/plain;charset="ISO-2022-JP" Content-Transfer-Encoding:7bit 方法をご存知の方は、ご指摘頂けたら助かります。

    • 締切済み
    • PHP
  • PHPフォームからメールを受信した時に文字化けが発生

    申し込みフォームから受信したメールが、文字化けします。 windowsではちゃんと表示されるのですが、macでは文字化けします。 更に、必ずはじめに以下の文面が記載されてきます。 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 困ってます!!宜しくお願い致します。

    • 締切済み
    • PHP
  • phpフォームで携帯へメール送信した場合の文字化け

    過去のよく似た事象を検索しましたが解決しなかったので 質問します。よろしくお願いします。 携帯電話のメールアドレスに送信するWEBフォームをphpで 作成したいのですが、文字化けが直らずに困っています。 コードは次のような感じです。 PCへのメールは文字化けせず、DoCoMoへ送るとsubjectは正常で本文が化けます。 またauとvodafoneへ送るとすべて化けます。 $to = "$_REQUEST['$email']"; $from = "info@aaa.bbb"; $subject = "テスト送信"; $message = "テストメールです" . $headers ='From: '. $from . "\r\n"      .'MIME-Version: 1.0' . "\r\n"      .'Content-Type: text/plain; charset=iso-2022-jp' . "\r\n"      .'Content-Transfer-Encoding:7bit' . "\r\n"      .'X-Mailer: PHP/' . phpversion(); if(mail($to, $subject, $message, $headers)==TRUE) print("メールを送信しました"); else print("メール送信に失敗しました"); 動作環境はSunOS5.7、Apache2.0、php5.0.3です。 コードはEUCで書いています。

    • ベストアンサー
    • PHP
  • sendmail でのヘッダ部分Content-Transfer-Encodingについて

    あまりPerlに精通しておりませんが、よろしくお願いします。 Perl でフォームからメールを送信するページを作成しましたが、メールヘッダの部分に --------------- print OUT "Content-Type: text/plain; charset=iso-2022-jp\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "MIME-Version: 1.0\n"; --------------- という風に書いているのに、届くメールは Content-Type: text/plain; charset=iso-2022-jp MIME-Version: 1.0 になって、Content-Transfer-Encoding: 7bit が抜け落ちます。(場合によっては、Content-Transfer-Encoding: base64 になる) どういった原因が考えられるか、アドバイスいただければ幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • mailコマンドでは化けないSubjectがPOPで受信すると文字化け

    mailコマンドで、メールのタイトル一覧を表示した時には、Subjectは文字化けしていないのですが、 POP3でメーラ(WindowsのBecky)で受信すると Subjectが文字化けしてしまいます。 ヘッダ情報は以下のようになっています。 MIME-version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit 原因は何でしょうか?