PHPで、HTMLメールの際のエラー

このQ&Aのポイント
  • HTMLメールを送る際に生のHTML文が含まれたメールが届くエラーが発生しています。
  • 普通のHTMLメールにするためには、スクリプト内のどこかに誤りがある可能性があります。
  • さくらサーバーを使用している環境で発生している問題です。
回答を見る
  • ベストアンサー

PHPで、HTMLメールの際のエラー

HTMLメールを送る下記スクリプトにおきまして、管理人宛てのメール本文を 見ると、添付画像のように、生のHTML文のついたメールが届いてしまいます。 普通のHTMLメールにするには、どこがどう間違っているのか、ご指導いただき たいです。 ちなみにサーバーはさくらサーバーです。 --------------------------------------------------------------------------------------------------------------- ////////////////////////////////////////// // 新着口コミを管理人にメールで知らせる // ////////////////////////////////////////// $to = "~"; // 管理人宛て $mail_title = " ユーザーが新着口コミを投稿しました。"; $header = "From: ~ Content-Type:text/html; charset=ISO-2022-JP Content-Transfer-Encoding:8bit "; //$uniqid = uniqid(); $to = mb_convert_encoding($to, "UTF-8", "auto"); // $toは、自動的にエンコードされない。 $mail_title = mb_convert_encoding($mail_title, "UTF-8", "auto");    $html_header = '<!DOCTYPE html"><html><meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP"></head><body bgcolor="#FFFFCC">';    $html_footer = '</body></html>'; $comment_header = $username." 様\n\n口コミ店舗名:".$shopname."\n\n"; $comment = $html_header."\n\n".$comment_header.$comment."\n\n"; // $comment = str_replace("<br>", "\n", $comment); // $comment = mb_convert_encoding($comment, "UTF-8", "auto"); $comment_anchor = "<a href=\"http://~.com/tokyo/admin/kuchikomi_edit.php?title=".$title."&comment=".$comment_copy."&username=".$username."&shopname=".$shopname."\">口コミ編集</a>"; $comment_anchor = mb_convert_variables($comment_anchor, "UTF-8", $title, $comment_copy, $username, $shopname); $comment = $comment."\n\n".$comment_anchor.$html_footer; $comment = mb_convert_encoding($comment, "UTF-8", "auto"); $header = mb_convert_encoding($header, "UTF-8", "auto"); mb_send_mail($to, $mail_title, $comment, $header); // メール送信

  • PHP
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.2

HTMLメールにする場合、HTMLパートだけというのは通常使われず、マルチパートメールにしてテキスト部とHTML部の両方を送信する事になります。 RFCの規定に合わせましょう。

beterugius
質問者

お礼

ありがとうございます。勉強になります。

その他の回答 (2)

  • kawais070
  • ベストアンサー率52% (2242/4282)
回答No.3

<!DOCTYPE html"> って書いてるけど、 <!DOCTYPE html> が正しいのでは?

beterugius
質問者

お礼

ご指摘、ありがとうございます。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

mb_send_mail関数を使っているからです。 mail関数に変更して下さい。

beterugius
質問者

お礼

お忙しいなか、お返事いただきありがとうございました。

関連するQ&A

  • phpでの受信

    ある質問ページでphpでの受信について、以下のような回答がありました。「サイトの代表アドレス」と「受け取る側のアドレス」は同じにしました。しかしエラーがでました。どこが間違いでしょうか ーーーーーーーーー 「フォーム」にname,subject,commentの欄があるとする。phpでの受信するには次のようなphpになります。 <?php $rp='-f サイトの代表アドレス'; $subject=mime(mb_convert_encoding($_POST['subject'],'JIS','UTF-8')); $body=mb_convert_encoding($_POST['name']."\n".$_POST['comment'],'JIS','UTF -8'); $head="Content-Type: text/plain; charset=ISO-2022-JP\nContent-Transfer- Encoding: 7bit"; mail('受け取る側のアドレス',$subject,$body,"From: サイトの代表アドレス\n".$head,$rp); ?> </body> </html>

    • ベストアンサー
    • PHP
  • 自作メールフォームから送信するとメール内容がおかしくなる。

    ※PHP初心者なので、お手柔らかにお願いします。 自作メールフォームからメール送信すると、メールは送れるのですがメールの内容がおかしくなります。 現状は、件名のみ正しく表示され、差出人と本文の内容が空になります。 いろいろなサイトを見て試してみたのですが、どれも同じ結果で何が間違っているのかよくわからず困ってます。 メールの設定として下記を、 mb_language("Japanese"); mb_internal_encoding ("SJIS"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $MailTo = "送付先メールアドレス"; メール送信事態は下記ソースの通りです。 // エンコードして文字列を作成 $Name = mb_convert_encoding($Name, 'JIS', 'auto'); $Header = "From:" .mb_encode_mimeheader($Name). "<" .$Mail. ">\n"; $Subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding("お問い合わせ", 'JIS', 'auto')). "?="; $Message = mb_convert_encoding($Message, "JIS", "auto"); // メール送信処理 $Ret = mb_send_mail($MailTo, $Subject, $Message, $Header);

    • ベストアンサー
    • PHP
  • メールの内容が文字化けします・・・

    <? function sendmail($to,$from,$from_name,$title,$message){ /* EUCコードへのエンコーディング */ $to = mb_convert_encoding($to , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $from = mb_convert_encoding($from , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $title = mb_convert_encoding($title , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $message = mb_convert_encoding($message , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); return $rcd; } ?> 何が原因か分からないのです・・・。 教えていただければ嬉しいですm(__)m

    • ベストアンサー
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯からメールを送ると文字化け・・・

    PCからメールを送ると正常に表示されてるのに、携帯からだと内容が化けてしまうという現象になってしまいました・・・。 function sendmail($to,$from,$from_name,$title,$message){ /* JISコードへのエンコーディング */ $to = mb_convert_encoding($to, "JIS","EUCJP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $from = mb_convert_encoding($from, "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $title = mb_convert_encoding($title , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $message = mb_convert_encoding($message , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); 分かる方いらっしゃいましたら、よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • 動的なPHPを静的なhtmlページに変換したい

    動的なPHPページ(RSS)を静的なhtmlのページとして、変換したいのですが、どのようにしたら良いでしょうか? 書いたPHPは下記のようなモノです。 <?php error_reporting(E_ERROR); require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $url = 'http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fwww.lucky-bag.com'; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo "<h3>$title</h3>\n"; echo "<dl>\n"; foreach ($rss->items as $item ) { $title = htmlspecialchars($item['title']); $title = mb_convert_encoding($title, "EUC-JP", "auto"); $description = htmlspecialchars($item['description']); $url = htmlspecialchars($item['link']); echo "<dt><a href=\"$url\">$title</a></dt>\n"; $description = mb_convert_encoding($description, "EUC-JP", "auto"); echo "<dd>$description</dd>\n"; } echo "</dl>\n"; ?> どうぞよろしくお願いいたします。

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

    下記のスクリプトにおいて、$message のHTML文を 送信先のメーラーに送信すると、HTML文がそのまま書かれている状態で、 メーラーの受信メールのなかで、コンテンツが表示されません。 どうすれば、メーラーの中で、HTMLのコンテンツそのものを 表示できるのでしょうか。 ご指導よろしくお願い致します。 「html_mail_test.php」 <?php // 新規ユーザーにメール送信 $to = "~@nifty.com"; // 送信先メールアドレス(新規ユーザー宛て) $subject = "HTMLメールテスト"; // 題名 $from = "~@co.jp"; $password = rand(1, 99999999); // 本文(個人情報+アンケート内容) $message = " <!doctype html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-2022-jp\"> <style type=\"text/css\"> .tg {border-collapse:collapse;border-spacing:0;} .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} .tg .tg-yw4l{vertical-align:top} </style> </head> <body> <table class=\"tg\"> <tr> <th class=\"tg-yw4l\"></th> </tr> <tr><td><img src=\"http://5247423.raindrop.jp/html_mail/image/.png\"></td></tr> </table> </body> </html> "; $to = mb_convert_encoding($to, "UTF-8", "auto"); // $toは、自動的にエンコードされない。 $subject = mb_convert_encoding($subject, "UTF-8", "auto"); $message = mb_convert_encoding($message, "UTF-8", "auto"); // EUCにエンコード mb_send_mail($to, $subject, $message, $from); // メール送信 ?>

    • ベストアンサー
    • PHP
  • ActionScriptとPHPでメール送信

    【flashmail.as】 LV1 = new LoadVars(); LV1.onLoad = function(success){ gotoAndStop(2); // 2フレーム目に移動 } var1 = ""; var2 = ""; var3 = ""; gotoAndStop(1); on(press){ if(var1==""){err=err+"名前が入力されていません!\n");} if(var2==""){err=err+"メールアドレスが入力されていません!\n");} if(var3==""){err=err+"メッセージが入力されていません!\n");} LV1.var1 = var1; LV1.var2 = var2; LV1.var3 = var3; if(err==""){ LV1.sendAndLoad("./flashmail.php", LV1, "POST"); } } 以上のようなactionscriptファイルと、FLAHファイル本体flashmail.flaの2フレーム目に 同様の文を、アクションとして、書いてます。もちろん、モーションファイルflashmail.swfも書き出して、FTPサーバーの同じディレクトリに置いています。 動きとしては、メールフォームに入力して、送信ボタンを押すと、ありがとうございました。 と表示され、そのあと、flashmail.phpのmb_send_mail() でメール送信するはずなのですが、メールが到着しません。 flashmail.phpの内容も下記に表示します。 【flashmail.php】 <?php $subject = $_POST['var1']; $to = $_POST['var2']; $message = $_POST['var3']; var_dump($message); $from = "~"; $subject = mb_convert_encoding($subject, "utf-8", "auto"); // utf-8にエンコード $message= mb_convert_encoding($message, "utf-8", "auto"); mb_internal_encoding("UTF-8"); $res = mb_send_mail($to, $subject, $message, $from); header("Location: flashmail.html"); ?> どうすれば、メールが到着するようになるのか、ご指導お願いします。

    • ベストアンサー
    • PHP
  • phpで送ったメールのヘッダーが本文にはみ出す

    表題のことでこまっております。 phpでメールフォームを作ったのですが、送ったメールをOutlookExpress(OE)で受信したときに、ヘッダーの一部が本文に表示されてしまいます。 OEで受信メールのプロパティを開くと下記のようになっております。 Return-Path: <xxx@xxx> Delivered-To: xxxxx_xxxxx@xxxx.xxx Received: (qmail 16291 invoked by uid 48); 1 Feb 2007 16:26:13 +0900 Date: 1 Feb 2007 16:26:13 +0900 Message-ID: <20070201072613.16290.qmail@xxxx.xxx> To: yyyyy@yyyy.yyy Subject: =?iso-2022-jp?B? From: zzz@zzzz.zzz X-Mailer: ContactForm MIME-Version: 1.0 Content-Type: text/plain;charset=ISO-2022-JP Content-Transfer-Encoding: base64 本文にはみ出るのは最後の3行(MIME~base64)です。 原因は空行が入っているためだと思いますが、OEのメールソースでは空行はありません。 プログラムのソースは $header ="From: $from\r\n"; $header ="CC: $cc\r\n"; $header .= "X-Mailer: $mailer\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $replyheader .= "Content-Transfer-Encoding: base64\r\n"; $Subject='=?iso-2022-jp?B?'.base64_encode(mb_convert_encoding($Subject,'JIS','SJIS')).'?='; @mail($from,$Subject,$Message,$header); hotmailなどのwebメーラーで見たときにははみ出していません。 これはなぜでしょうか?宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpメール送信

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-S"> <title>お問い合わせフォーム</title> </head> <body> <?php //お問い合わせタイトル、詳細のセット $title = htmlspecialchars($_POST['title'], ENT_QUOTES); $message = htmlspecialchars($_POST['message'], ENT_QUOTES); mb_language('ja'); mb_internal_encoding('UTFS'); $name = '自動送信’; $email = '<僕のアドレス>'; $header = 'From: '. mb_encode_mimeheader($name) . '<' . $email .'>'; $result = mb_send_mail("<僕のアドレス>", $title, $message, $header); if ($result){  echo '■お問い合わせ内容を担当者に送信しました。’; } else {  echo '■担当者への送信に失敗しました。'; } ?> </body> </html> 何故かエラーになります。原因を教えてください

    • ベストアンサー
    • PHP

専門家に質問してみよう