• 締切済み

件名が文字化けしてしまう。PHPで送信フォームを作成しましたが件名が?

件名が文字化けしてしまう。PHPで送信フォームを作成しましたが件名が?????と 文字化けします。 <? require_once("./lib/form_check.lib"); $type = $_POST['type']; $company = $_POST['company']; $industry = $_POST['industry']; $post = $_POST['post']; $name = $_POST['name']; $address = $_POST['address']; $tel = $_POST['tel']; $mail = $_POST['mail']; $detail = $_POST['detail']; type_name($type); $to = "■■■@■■■■"; $subject = "お問い合わせ"; $header= "From:".$mail; $msg ="────────────────────────────────────────────\n"; $msg .="■お問い合わせ内容\n".$type_name."\n\n"; $msg .="■会社名\n".$company."\n\n"; $msg .="■業種\n".$industry."\n\n"; $msg .="■役職・部署名\n".$post."\n\n"; $msg .="■氏名\n".$name."\n\n"; $msg .="■住所\n".$address."\n\n"; $msg .="■電話番号\n".$tel."\n\n"; $msg .="■メールアドレス\n".$mail."\n\n"; $msg .="■お問い合わせ詳細\n".$detail."\n"; mail($to,$subject,$msg,$header); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <title>お問い合わせ</title> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> これではダメなので mb_language("japanese"); mb_internal_encoding("EUC-JP"); mb_send_mail($to,$subject,$msg,$header); と付け足しました。 これで件名が????になるのはふせげたのですが今度は送信後のページ全体が 文字化けとなりお手上げ状態です。 どう組めばいいのでしょうか?

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

みんなの回答

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

bodyやheaderもちゃんとやろうよ・・・ (もうすこし調べてから質問してほしいところ) $subject="お問い合わせ"; $subject=mb_convert_encoding($subject,"JIS","EUC-JP"); $subject=mb_encode_mimeheader($subject,"JIS"); $from ="おくるひと"; $from=mb_convert_encoding($from,"JIS","EUC-JP"); $from=mb_encode_mimeheader($from,"JIS"); $message="・・・・"; $message=mb_convert_encoding($message,"JIS","EUC-JP"); $version=phpversion(); $header=<<<eof From: {$from} <xxx@exsample.com> Return-Path: <xxx@exsample.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Mailer: PHP/{$version} eof; mail($to,$subject,$message,$header); とか・・・

  • localica
  • ベストアンサー率52% (202/385)
回答No.3

良くあるミスですけど、エンコーディングを変更した際にPHPファイルの文字コードセットも変更していますか? 或いは入力フォームが正しくエンコーディングされていますか?

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

>その方法ですと件名が無記名になってしまうのです。 ならないでしょ・・・ <? $subject="お問い合わせ"; $subject=mb_convert_encoding($subject,"JIS","EUC-JP"); $subject=mb_encode_mimeheader($subject,"JIS"); print $subject; ?> もちろんこの場合はソースがEUCで書かれていなければいけませんが。

naiteisyou
質問者

お礼

度々ありがとうございます。 <? require_once("./lib/form_check.lib"); $type = $_POST['type']; $company = $_POST['company']; $industry = $_POST['industry']; $post = $_POST['post']; $name = $_POST['name']; $address = $_POST['address']; $tel = $_POST['tel']; $mail = $_POST['mail']; $detail = $_POST['detail']; type_name($type); $to = "■@■"; $subject="お問い合わせ"; $subject=mb_convert_encoding($subject,"JIS","EUC-JP"); $subject=mb_encode_mimeheader($subject,"JIS"); $header= "From:".$mail; $msg ="────────────────────────────────────────────\n"; $msg .="■お問い合わせ内容\n".$type_name."\n\n"; $msg .="■会社名\n".$company."\n\n"; $msg .="■業種\n".$industry."\n\n"; $msg .="■役職・部署名\n".$post."\n\n"; $msg .="■氏名\n".$name."\n\n"; $msg .="■住所\n".$address."\n\n"; $msg .="■電話番号\n".$tel."\n\n"; $msg .="■メールアドレス\n".$mail."\n\n"; $msg .="■お問い合わせ詳細\n".$detail."\n"; mail($to,$subject,$msg,$header); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <title>お問い合わせ</title> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> このようにしたのですが件名はちゃんとなったのですが本文などが 文字化けしてしまいました。 これにすると <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> 件名部分がなく本文が大丈夫の状態です。

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

mb_send_mail()はなにかと問題がおおくてお薦めできません。 mail()を使うときに普通にエンコードしてやればよいのでは? $subject=mb_convert_encoding($subject,"JIS","EUC-JP"); $subject=mb_encode_mimeheader($subject,"JIS"); mail($to,$subject,$msg,$header);

naiteisyou
質問者

お礼

ありがとうございます。 その方法ですと件名が無記名になってしまうのです。 「お問い合わせ」という件名を付けたいのですが どのようにすればいいのでしょうか?

関連するQ&A

  • 送信フォームで必須項目を直したい。現在では全部必須項目になっているので

    送信フォームで必須項目を直したい。現在では全部必須項目になっているのですが それを一部だけ必須項目にしたいのです。どこをいじればいいのでしょうか? <? require_once("./lib/form_check.lib"); $type = $_POST['type']; $company = strip_tags( $_POST['company'] ); $industry =strip_tags( $_POST['industry'] ); $post = strip_tags( $_POST['post'] ); $name = strip_tags( $_POST['name'] ); $address = strip_tags( $_POST['address'] ); $tel = strip_tags( $_POST['tel'] ); $mail = strip_tags( $_POST['mail'] ); $detail = strip_tags( $_POST['detail'] ); $form_check = $_POST['form_check']; empty_check($company,$industry,$post,$name,$address,$tel,$mail,$detail); type_name($type); ?>

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

    メール送信で件名が文字化けしてしまいます。 カテゴリ内には同様の質問もあるようですが、 解決できないので、投稿しました。 以下のようなコードです。 $to= "aa@aa.aa"; $from= "bb@bb.bb"; $subject= "メール送信テスト"; $headers= "From:$from"; $subject = i18n_mime_header_encode(i18n_convert($subject, "JIS")); $name= $_POST["name"]; $sub= $_POST["sub"]; $body= $_POST["body"]; $message="$name \n $sub \n $body \n"; if(mail($to, $subject, $message,$headers)){ echo "送信完了"; }else{ echo "送信エラー"; } ちなみに、 $subject= base64_encode($subject); とかもやってみたけど駄目でした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpメールフォーム マック入力のみ文字化け

    phpにて自動返信付きメールフォームをUTF-8で別の方が作ったものを自分で修正中です。 サーバーはOCNのホスティングです。 入力環境がMacの人だと入ってくるメールが文字化けを起こしております。 送信に以下のコードを入れているんですが、これでは問題がありますでしょうか? windowsでは問題がありません。 ISO-2022-JPはwindowsもmacも問題がないということだと思ったのですが これが効いていないということになるのでしょうか? 勉強中の身でわからず、教えていただけますと幸いです。 よろしくお願いいたします。 <?php $name = Mb_Convert_Kana($_POST['name'],"S"); $name2 = Mb_Convert_Kana($_POST['name2'],"S"); $name3 = Mb_Convert_Kana($_POST['name3'],"S"); $yubin = Mb_Convert_Kana($_POST['yubin'],"a"); $jyusyo = Mb_Convert_Kana($_POST['jyusyo'],"S"); $tel = Mb_Convert_Kana($_POST['tel'],"a"); $mail = Mb_Convert_Kana($_POST['mail'],"a"); $comment = Mb_Convert_Kana($_POST["comment"],"S"); $comment = str_replace(" ","\n",$comment); //文字列の置換 //メール送信 $fp = popen("/usr/local/bin/nkf -e -m0 | /usr/sbin/sendmail -oi -t", "w"); fwrite($fp, "From: $mail\n"); fwrite($fp, "To: info@amano-grp.co.jp\n"); fwrite($fp, "Subject: " . mb_encode_mimeheader('お問い合わせフォームの内容', 'ISO-2022-JP') . "\n"); //fwrite($fp, "Subject: お問い合わせフォームの内容\n"); fwrite($fp, "Mime-Version: 1.0\n"); fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\n\n"); fwrite($fp, "以下の内容で、メールフォームでのお問い合わせがありました。\n\n"); fwrite($fp, "団体名・法人名: $name\n\n"); fwrite($fp, "所属: $name2\n\n"); fwrite($fp, "お名前: $name3\n\n"); fwrite($fp, "郵便番号: $yubin\n\n"); fwrite($fp, "住所: $jyusyo\n\n"); fwrite($fp, "電話番号: $tel\n\n"); fwrite($fp, "メール: $mail\n\n"); fwrite($fp, "お問い合わせ内容:\n$comment\n\n"); pclose($fp);

    • ベストアンサー
    • PHP
  • 問い合わせフォームからPHPを使って、、、、、

    問い合わせフォームからPHPを使って指定のアドレスにメールを送ろうとしているのですが、届きません、、、、、、 原因が分かりません。助けていただけないでしょうか。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>お問い合わせページ</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>お問い合わせページ</h1> <form action="send_email.php" method="post"> <label for="name">お名前:</label> <input type="text" id="name" name="name" required><br><br> <label for="email">メールアドレス:</label> <input type="email" id="email" name="email" required><br><br> <label for="message">お問い合わせ内容:</label><br> <textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br> <input type="submit" value="送信"> </form> </body> </html> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 以下がPHPのプログラムです。 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST["name"]; $email = $_POST["email"]; $message = $_POST["message"]; // 送信先のメールアドレス $to = "***@gmail.com"; // 件名 $subject = "お問い合わせがありました"; // 本文 $body = "お名前: $name\n"; $body .= "メールアドレス: $email\n\n"; $body .= "お問い合わせ内容:\n$message"; // メールを送信 mail($to, $subject, $body); // 送信後のリダイレクト header("Location: thank_you.html"); exit; } ?>

    • 締切済み
    • 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
  • こんにちは。PHPでメールフォームを送信したいのですが、

    こんにちは。PHPでメールフォームを送信したいのですが、 メールが文字化けしてしまいます。 PHP初心者です。 時間をかけてゆっくりやりたいのですが、 仕事でやっているため、そうも言ってられず。。。 ======================================================= $msg= 'Name: '.$_POST['name'].'<br /> Email: '.$_POST['email'].'<br /> IP: '.$_SERVER['REMOTE_ADDR'].'<br /><br /> Message:<br /><br /> '.nl2br($_POST['message']).' '; $mail = new PHPMailer(); $mail->IsMail(); $mail->AddReplyTo($_POST['email'], $_POST['name']); $mail->AddAddress($emailAddress); $mail->SetFrom($_POST['email'], $_POST['name']); $mail->Subject = "A new ".mb_strtolower($_POST['subject'])." from ".$_POST['name']." | contact form feedback"; $mail->MsgHTML($msg); $mail->Send(); ========================================================================= 一部ですが、こちらを修正すればよいのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • CGIでメール送信で件名文字化け

    CGIにてメールを送信しています。 Beckyや一部のWEBメーラーで見ると、本文も件名も正常表示されますが、一部のWEBメーラー(Chicappa)では件名のみ文字化けします。 例えば件名が「お問い合わせの受付」の場合 「 $B$*Ld$$9g$o$;$N<uIU (B」となります。 困っています。原因を教えてください。 ソースはutf8で保存しています。 use utf8; use MIME::Lite; use Jcode; my $msg = MIME::Lite->new( From => $mail_from, To => $mail_to, Subject => jcode("お問い合わせの受付")->jis, Type => 'multipart/mixed', ); $msg->attach( Type => 'image/jpeg', Path => "./picture.jpg", ); $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => jcode($mail_body)->jis ); $msg->send();

  • メールフォームの件名が文字化けします

    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
  • qdmailを使用したPHPフォームにて

    qdmailを使ったPHPのフォームを作っています。 index.html → receive.html → completion.html という順序で展開します。 全ての処理は、completion.htmlに書かれています。 receive.htmlは、プレビュー画面です。 completion.phpの内容は、 (1)thank you 表示 (2)管理者へのフォーム内容メール送信 (3)送信者へ、thank youメールの送信 質問: receive.htmlから、戻るボタンを使うと、フォーム内容が全て消えてしまいます。 sessionを使うというのは、分かるのですが、具体的に分かりません。 index.htmlの内容は、以下です。 <?php session_start(); $_SESSION['mail_send_done'] = false; /* 入力パラメータ */ $param = array( 'zip', 'c_add', 'corp_or_indv', 'c_name', 'c_name_furigana', 'attending', 'name', 'name_furigana', 'tel1', 'tel2', 'tel3', 'fax1', 'fax2', 'fax3', 'mail', 'remail' ); if($_SERVER["REQUEST_METHOD"] == "POST"){ foreach($param as $key) { $$key = $_POST[$key]; } }else{ $$key = ""; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ・・・・・・・・・・・ receive.htmlは、以下で始まります。 ?php /* 入力パラメータ */ $param = array( 'zip', 'c_add', 'corp_or_indv', 'c_name', 'c_name_furigana', 'name', 'attending', 'name_furigana', 'tel1', 'tel2', 'tel3', 'fax1', 'fax2', 'fax3', 'mail', 'remail' ); if($_POST['corp_or_indv']=='A') { $INQ_TXT = "個人"; }elseif($_POST['corp_or_indv']=='B') { $INQ_TXT = "法人"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

    • ベストアンサー
    • PHP
  • メールフォームで件名のみ文字化け

    質問させて頂きます。 初心者なので見当違いな事も書くかもしれませんが、ご容赦ください。 自社HPで今まで問題なく稼動していたメールフォームが、 Notesのバージョンアップをしたらいきなり件名のみ文字化けするようになってしまいました。 お客様に行く自動返送メールの件名も文字化けしてしまっていて困っています。 何か対策は考えられますでしょうか? ちなみに下記がフォームのhtmlです。 <script type="text/javascript" src="docu/mailform.js" charset="Shift_jis"></script> <form id="mailform" action="docu/send.cgi" method="post" name="mailform"> <input type="hidden" name="sendmail" value="/usr/sbin/sendmail"> <input type="hidden" name="mailto" value="email"> <input type="hidden" name="mailto" value="xxxxxx@xxxx.xx.xx"> <input type="hidden" name="subject" value="資料請求メール"> <input type="hidden" name="return_subject" value="資料請求ありがとうございます "> 以上です。<head>には <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> の記述もあります。 CGIはフリーCGIを使っています。 宜しくお願いします。

    • ベストアンサー
    • CGI

専門家に質問してみよう