• 締切済み

フォームメールでタイトルが文字化けする

こちらのサイトにある http://www.sapphirus.biz/php/sformmail/ フォームメール1というものを利用して確認画面つきのフォームを作成しております。 こちらのサイトでダウンロードしたものをデフォルトで利用すると ユーザーに対する自動返信メールに sformmail.php内の設定項目に記述したメールアドレスが メールの送信者の所に表示されて返信されてきます。 / 設定 $mail_to = 'XXXXXXXXXXXX'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード 送信者のところにメールアドレスだけでなく、 日本語名も追加して自動返信メールを使いたかったため、 sformmail.php内の // メール自動返信 if ($_SESSION['autoReply'] && $_SESSION['email'] && is_file('reply.php')) { $reply_header = "From:{$mail_to}\n"; if ($mail_bcc) $reply_header .= "Bcc: {$mail_bcc}\n"; $reply_header .= "X-Mailer: {$x_mailer}"; include ('reply.php'); $reply_message = html_entity_decode($reply_message, ENT_QUOTES, $internal_enc); $reply_message = str_replace("<br />", "", $reply_message); $reply_message = str_replace("\t", "\n", $reply_message); $reply_message = mb_convert_encoding($reply_message, $internal_enc, 'AUTO'); mb_send_mail($mail_from, $reply_subject, $reply_message, $reply_header); } にある $reply_header = "From:{$mail_to}\n";を $reply_header = "From:{YYYYYYY}{$mail_to}\n"; と変更しました。 結果、Gメールでメールを受け取ると送信者欄にYYYYYYYとメールアドレスが表示されるのですが メーラーによってYYYYYYYの部分が文字化けしてしまいます。 色々と調べておりましたら文字コードが $internal_enc = 'UTF-8'; // 文字エンコード という設定がありますが $reply_header = "From:{YYYYYYY}{$mail_to}\n"; に反映できていないのが問題と見受けられますが 修正方法がわかりません。 当方CGIの知識がないため、ご教示いただければ幸いです。

  • jikon
  • お礼率50% (15/30)
  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

メールヘッダには日本語は(そのままでは)使えません。mimeエンコードする必要があります。mb_encode_mimeheaderを使えばmb_internal_encodingの文字セットからmb_languageで適切な文字セット('ja'ならiso-2022-jp)に変換してmimeエンコードするまでを一括して行います。 http://php.net/manual/ja/function.mb-encode-mimeheader.php #プログラムでメールを扱うならメール関連のRFCを一読してください。 see. http://www.phppro.jp/qa/3986

関連するQ&A

  • メール送信の設定について

    PHPでメール送信をしようとしています。 mb_internal_encoding("utf-8"); mb_language("japanese"); $from = "admin@testsv.com"; $reply_to = "reply@exp.co.jp"; $to = "custom@hoge.co.jp"; $cc = "test@foo.co.jp"; $bcc = "test2@bar.co.jp"; $subject = "例の件です"; $header = "From:".$from."\n"; $header .= "Cc: ".$cc."\n"; $header .= "Bcc: ".$bcc; $header .= "Reply-To: ".$reply_to."\n"; $header .= "X-Mailer: myphpMail ". phpversion(). "\n"; $contents = "氏名 :".$name."\n"; $contents .= "お問い合わせ内容 :".$inquiry."\n"; mb_send_mail($to,$subject,$contents,$header); としています。 ところが、ヘッダーのX-Amavis-Alert:の項目でBAD HEADER, Duplicate header field: "To"と表示されています。 toが複数あるわけではないのに表示されていて原因が分かりません。 教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • フォームの「戻るボタン」で内容が消えてしまう・・・

    PHPを勉強しながら、ブログをやってみたいと考えている素人です。 ネット上のフリーのフォームを利用させて頂き、問合せページを作ってみたのですが 確認ページの戻るボタンを押すと、入力が消えて、始めからやり直しになってしまいます。 session を利用しているようなのですが、素人ゆえsessionの仕組みが何とか解る程度で どこを修正して良いのか解りません。 「session_cache_limiter(‘none’);」 と言うものが、キーポイント?のようなのですが、色々と試しておりますが 一向にうまく行きません、何卒ご指導お願い致します。 以下、利用させて頂いているフォームの一部 配布元のサイト様(http://www.sapphirus.biz/php/sformmail/) 処理の流れ sformmail.html(入力) ≫ sformmail.php(入力チェック) ≫ confirm.php(確認) ≫ sformmail.php(送信[template.php/reply.php]) ≫ completion.html(完了) ○sformmail.php(入力チェック) // 設定 $mail_to = 'sample@mail.address'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード // メイン session_start(); if (!extension_loaded('mbstring')) Err('マルチバイト文字列関数が利用できません'); if (!$mail_to) Err('受取先メールアドレスが設定されてません'); if (!$_POST) Err('POSTデータがありません'); mb_language('ja'); mb_internal_encoding($internal_enc); $x_mailer = 'Sapphirus.Biz Formmail Ver. 1.40 (PHP/' . phpversion() . ')'; $mode = $_POST['mode']; switch ($mode) { case 'SEND': // メール送信 if (!$_SESSION) Err('セッションデータがありません'); // メールヘッダ if (!$_SESSION['email']) $mail_from = 'S.B.Formmail'; else $mail_from = $_SESSION['email']; $mail_header = "From: {$mail_from}\n"; if ($mail_bcc) $mail_header .= "Bcc: {$mail_bcc}\n"; $mail_header .= "X-Mailer: {$x_mailer}"; --------------文字制限のため以下省略---------------- ○confirm.php(確認) <?php //セッションを利用するのでここは削除しないで下さい session_start(); if (SID) Err('Cookieを有効にして下さい'); if (!$_SESSION) header('Location: completion.html'); function Err($err) { echo <<< EOM <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> ----以下省略--- 他にも、入力用や送信完了用のhtmlファイル等ありますが 上記が関連しているコードだと思います。どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • メールフォームの件名が文字化けします

    PHPでメールフォームを作っていて、以前のサーバーではエラーも無く動いていたのですが、新しいサーバーでは件名がどうしても文字化けしてしまいます。(※本文も化けていましたが解決しました) 色々調べて色々試してみたのですが上手く動作せず・・・ 以下にPHPの必要と思われる部分を書いておきますので、ご解答の程よろしくお願いいたします。 ちなみにPHPのバージョンは4.4.2です。 <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php $mailto = "aaa@bbb.ccc" $subject = "フォームからのメール"; ~各種設定・エラーチェック等省略~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject=mb_encode_mimeheader($subject,"ISO-2022-JP"); if($from_add == 1) { $from = $_POST['E-mail1']; $header="From: $from\nReply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($mailcheck == 0 || $sendchk == 1) { mb_send_mail($mailto,$subject,$body,$header); if($remail == 1) { mb_send_mail($reto,$resubject,$rebody,$reheader); } } else { htmlHeader(); ?> ~送信確認画面レイアウト・その他処理省略~ <?php } ?>

    • ベストアンサー
    • PHP
  • PHPでmailもしくはmb_send_maiを使って文字化け

    いろいろサイトで調べてもはっきりした答えがないので質問しました。 パターン1・・・mail関数 $mail_subject = '入会申込受付のご連絡'; $mail_subject = base64_encode($mail_subject); $mail_subject = '=?ISO-2022-JP?B?' . $mail_subject . '?='; $header = "From: $sousin_email\n"; $header .= "Reply-To: $email\n"; $header .= "Date: $mail_date\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $mail_body= "こんにちは"; mail($myemail, $mail_subject,$mail_body,$header);//ユーザーへ この場合、OutLook、Docomo、AUのメーラーでは問題なしですが、Vodafoneの3G機種(703SH)では件名・本文が文字化け パターン2・・・mb_send_mail $mail_subject = '入会申込受付のご連絡'; $mail_body= "こんにちは"; $header = "From: $sousin_email\n"; $header .= "Reply-To: $email\n"; $header .= "Date: $mail_date\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; mb_language("Japanese"); mb_internal_encoding("sjis"); mb_send_mail($myemail, $mail_subject,$mail_body,$header);//ユーザーへ この場合、本文はvodafoneも含め文字化けしないのですが、件名が「e会申込受付のご連絡」となってしまい、入という文字が表示されません。いくつかの文字がそのように化けるのですが何が化けるのかは検証はできておりません。 mailでもmb_send_mailでもいいのですが、すっきりとほどんどのメーラーで対応できる方法はあるのでしょうか? どなたかご教授お願いします。

    • 締切済み
    • PHP
  • メールの文字化け

    define( 'CNST_MAIL_REPLY' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_ADDR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_ERROR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_NAME' , 'ここが、差出人で、日本語表示したいんですが文字化け' ); define( 'CNST_MAIL_TO_ADDR' , 'aaa@aaa.co.jp' ); //* メールアドレス設定 *// $mail_header = ""; if ( CNST_MAIL_REPLY != "") { if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= "Reply-To: ".CNST_MAIL_REPLY; } $from = "From: "; if ( CNST_MAIL_FROM_NAME != "") { $from .= "\"".CNST_MAIL_FROM_NAME."\""; } if ( CNST_MAIL_FROM_ADDR != "") { $from .= " <".CNST_MAIL_FROM_ADDR.">"; } if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $from; if( CNST_MAIL_ERROR != "") { $errors_to = "Errors-To: "; $errors_to .= CNST_MAIL_ERROR; if( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $errors_to; $sub_parm = "-f".CNST_MAIL_ERROR; $mail_subject = mb_convert_encoding($mail_subject, "ISO-2022-JP","SJIS"); $mail_text = mb_convert_encoding($mail_text, "ISO-2022-JP","SJIS"); $mail_header = mb_convert_encoding($mail_header,"ISO-2022-JP","SJIS"); // メール送信処理 mb_language("Japanese"); mb_send_mail($to, $mail_subject, $mail_text, $mail_header, $sub_parm); 上のメール送信プログラムなんですが、 差出人の名前が文字化けしてしまいます。 質問のしかたがよくわからなかったのでプログラムをのせました。 アドバイス宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP
  • メールの文字化け

    メールフォームを作成したのですが受信したメールが文字化けしてしまいます 色々調べたのですが初心者なので解りません どうかよろしくお願いします <?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $message = "\n名前:" . $_POST["name"] ."\n住所:" . $_POST["address"]."\nビルアパートなど:" . $_POST["address02"]. "\n電話番号:" . $_POST["telphone"]. "\nメールアドレス:" . $_POST["mail"]. "\nお問い合わせ内容:" . $_POST["message"]; if (!mb_send_mail("aa@aa.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?>

    • 締切済み
    • PHP
  • メールフォームから送信すると文字化けします^^;

    海外のHPのテンプレサイトにてダウンロードしたテンプレート内のメールフォームで送信すると文字化けしてしまいます^^; 下記がsendmail.php内の中身なのですが、何が足りないでしょうか?^^; ご教授よろしくお願いします。 http://www.premiumfreebies.eu/previews/ProFolio/ <? //This php file receives the post vars of the contact page and sends it to a email address //Settings $email = 'メールアドレス'; $subject = '[NAME] HP form mail '; $name = $_POST['name']; $from = $_POST['email']; $message = $_POST['message']; mb_language("ja"); mb_internal_encoding("UTF-8"); //Set the headers and send the mail $subject = str_replace('[NAME]', $name, $subject); $headers = 'From: '.$name.' <'.$from.'>'; mail($email, $subject, $message, $headers); ?>

    • ベストアンサー
    • PHP
  • PHPメールフォームでの文字化けに苦しんでいます。

    レンタルサーバー(ファーストサーバ)でPHPのメールフォームを作っています。 PHPフォームから出力される送信確認画面と、送られるメールで特定の文字が (例えば「契」が「啓」に)化けてしまいます。 色々調べて出来る対策はしたのですが一向に分かりません。 どうやれば文字化けが直るか具体的に教えてください。 文字化け対策用に.htaccessをディレクトリに入れています。 .htaccessの中身 php_flag mbstring.encoding_translation off php_value default_charset "Shift_JIS" PHPフォームのメイン処理部分です。 <?php header("Content-Type: text/html;charset=Shift_JIS"); ~~~省略~~~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resubject,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"))."?="; if($from_add == 1) { $from = $_POST['E-mail']; $header="From: $from\nReply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } mail($mailto,$subject,$body,$header); else { htmlHeader(); ?> <!-- 送信確認 --> 間違いがなければ送信ボタンを押してください。<br><br> <form action="form.php" method="POST"> <? echo $err_message; ?> <table width="500" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<tr bgcolor=#ffffff><td bgcolor=#eeeeee width="."125"." ><small><div style = line-height:0.5>".$key."</small></td><td><small>".$var); ?> <input type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</div></small></td></tr>\n");}?> ~~~後処理省略~~~ よろしくお願いします。

    • 締切済み
    • PHP
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP

専門家に質問してみよう