PHPのmb_send_mail関数でメールフォームを作成した時に文字化けする理由はなぜでしょうか?

このQ&Aのポイント
  • ホームページ作製の祭にmb_send_mail関数を使ってmailフォームを作ったのですが、送信はされているのですが、mailフォームのアドレスを記入するところにひらがなやデタラメなアドレスを入れると、Outlook で受信すると送信者覧の所だけ、文字化けします。
  • メール本文に表示されているデタラメなアドレスはそのまま表示されるのですが、なぜでしょうか?
  • PHPの設定が原因かOutlookが原因か、サーバーの問題なのか理由がわかりません。
回答を見る
  • ベストアンサー

PHP mb_send_mail関数 の文字化け

ホームページ作製の祭にmb_send_mail関数を使ってmailフォームを作ったのですが、送信はされているのですが、mailフォームのアドレスを記入するところにひらがなやデタラメなアドレスを入れると、Outlook で受信すると送信者覧の所だけ、文字化けします。 (きちんと半角英数で○○@○○と入力すると文字化けせずに表示されます。) メール本文に表示されているデタラメなアドレスはそのまま表示されるのですが... なぜでしょうか?? PHPの設定が原因かoutlookが原因か、サーバーの問題なのか... サーバーは「さくらインターネットサーバー」です。 PHPはバージョン 5.2.10 php.iniの設定↓ bstring.language = Japanese mbstring.internal_encoding = euc-jp mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 mbstring.strict_detection = Off mbstring.http_output_conv_mimetype= mbstring.script_encoding= SMTP = ○○.sakura.ne.jp sendmail_from = ○○@○○.jp smtp_port = 25 mail.add_x_header = Off 送信ページはeuc-jpで作ってます。 送信ページのphp↓ <?php // メール送信先 $to = "○○@○○.jp"; if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "<br />メールを送信しました。"; } else { echo "<br />メール送信失敗です。"; } } ?>

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • takapiii
  • ベストアンサー率55% (944/1707)
回答No.1

ヘッダーはMIMEが必要ですが、処理していますか? 通常Fromは以下のようになります。 $headers .= "From: ".mb_encode_mimeheader (mb_convert_encoding($from_name,"ISO-2022-JP","AUTO")) . "<".$from_email."> \n"; マニュアルのサンプルコードを確認してください。 http://php.net/manual/ja/function.mb-send-mail.php

2009matsu
質問者

お礼

回答有難うございます。 自分の思いつくように、 下記のように単純に変更してみたら一応送信できました。 しかし、PHP初心者なものでこれで正しいのか分かりません。 このような記述はおかしいのでしょうか?? <?php // メール送信先 $to = "○○@○○.jp"; if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } $frommime = mb_encode_mimeheader($from); $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$frommime<$from>")) { echo "<br />メールを送信しました。"; } else { echo "<br />メール送信失敗です。"; } } ?> --------------------------------------- 自分で変更しときながら分からないところがあるのですが、 if (mb_send_mail($to, $title, $naiyou, "From:$frommime<$from>")) の記述ですが、 <>で$fromを囲むとその部分が非表示になるということなのでしょうか?... <$from>を記述しないとサーバーのドメイン?のようなものが送信者アドレスの後に付随してくるのですが... それと、 自分がこんな書き方しか思いつかなかったからなのですが、 $frommime = mb_encode_mimeheader($from); で $fromを エンコードして$frommimeに代入しているのに、その後にまた$fromを使ってるのが、何かきしょく悪くてしっくりこないのですが(苦笑) おかしいことではないのでしょうか??

関連するQ&A

  • PHP関数mb_send_mailで送信すると件名が文字化けしてしまいます。

    PHP関数mb_send_mailでメールの送信しているのですが、件名だけが文字化けしてしまいます。 Windows2000Server+IIS ■PHPソース mb_send_mail($strMail,mb_convert_encoding("あいうえお","JIS","auto"),mb_convert_encoding("かきくけこ","JIS","auto"),$header); ■PHP.INI設定 extension=php_mbstring.dll SMTP = localhost smtp_port = 25 sendmail_from = sample@sample.jp mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ■文字化けするSubject Subject: =?US-ASCII?B?GyRCJCIkJCQmJCgkKhsoQg==?= このPHPソースを別のレンタルサーバにいれ、送信すると文字化けせずに届きます。 なぜか、受信メールの文字コードがUS-ASCIIになっています。どうすればいいのでしょう? 誰かたすけてくださいーー

  • PHPで問い合わせフォーム 受信すると文字化けする

    フォーム⇒ (1)確認  ⇒ (2)送信 と3つに分けて、phpファイルに書きました。 ためしに、送信してみると、成功はするものの、文字が化けてメールの内容が分かりません。 分からないので教えてください。 フォーム ↓ <form method="POST" action="kakunin.php"> <table border="0"> <tr> <td >お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value=" お問い合わせ内容を確認 "></td> </tr> </table> </form> (1) kakunin.php ↓ 入力フォームから情報を受け取り確認 <?php // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<p>お名前を入力してください。"; $ErrFlg = 1; } if ($from == "") { echo "<p>メールアドレスを入力してください。"; $ErrFlg = 1; } if ($title == "") { echo "<p>メールタイトルを入力してください。"; $ErrFlg = 1; } if ($naiyou == "" ) { echo "<p>メッセージを入力してください。"; $ErrFlg = 1; } if ($ErrFlg) { exit(); } ?> 内容を確認して送信ボタンをクリックしてください <form method="POST" action="mail.php"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><?php echo $name?></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><?php echo $from?></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><?php echo $title?></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><?php echo nl2br($naiyou) ?></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<?php echo $name ?>"> <input type="hidden" name="from" value="<?php echo $from ?>"> <input type="hidden" name="title" value="<?php echo $title ?>"> <input type="hidden" name="naiyou" value="<?php echo $naiyou ?>"> </form> (2) mail.php ↓のコード 送信 <?php // メール送信先を指定します。 $to = "xxxxxxxxxx■ gmail.com"; // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // メール本文を組み立てます。 $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } } ?>

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

    プログラミング&PHP超初心者です。 PHPでメールフォームを作成して、送信には成功しましたが、受信したメールが文字化けしています。 いろいろ調べたのですが、解決できませんでした。 どなたか詳しいかた、教えていただけると嬉しいです。 送信する部分: if ($name != \"\" and $from != \"\" and $title != \"\" and $naiyou != \"\" ) { if (mb_send_mail($to, $title, $naiyou, \"From:$from\")) { echo \"メールを送信しました\"; } else { echo \"メール送信失敗です\"; } 文字コードはEUC-JPです。 サーバーはロリポップです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPからのメールがうまく作動しない。。。

    php初心者です。宜しくお願いします。 問い合わせフォームを作成したく、以下のHTMLとPHPファイルを作成しましたが、「mail.php」の時点で作動せず、メールもおくられません。色々調べて「.htaccess」での設定に関係あると書いていますが、よくわかりません・・・ずっとわからず悩んでます。教えていただけないでしょうか。宜しくお願い致します。 「mail.html」 <html> <head> <title>メール送信フォーム</title> </head> <h2>メール送信フォーム</h2> <form method="POST"action="kakunin.php"> <table border="0"> <tr> <td>お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value="内容を確認"></td> </tr> </table> </form> </body> </html> 「kakunin.php」 <html> <head> <title>メール送信フォーム</title> </head> <body> <h2>メール送信内容確認画面</h2> <?php //フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ //「magic_quotes_gpc=on」のときはエスケープ解除 if(get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } //値をチェックします。 $ErrFlg = 0; if($name == ""){ echo"<p>お名前を入力してください。"; $ErrFlg = 1; } if($from == ""){ echo"<p>メールアドレスを入力してください。"; $ErrFlg = 1; } if($title == ""){ echo"<p>メールタイトルを入力してください。"; $ErrFlg = 1; } if($naiyou == ""){ echo"<p>メッセージを入力してください。"; $ErrFlg = 1; } if($ErrFlg){ exit(); } ?> <h2>内容を確認して送信ボタンをクリックしてください。</h2> <form method="POST" action="mail.php"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><?php echo $name?></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><?php echo $from?></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><?php echo $title?></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><?php echo $naiyou?></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<?php echo $name?>"> <input type="hidden" name="from" value="<?php echo $from?>"> <input type="hidden" name="title" value="<?php echo $title?>"> <input type="hidden" name="naiyou" value="<?php echo $naiyou?>"> </from> </body> </html> 「mail.php」 <HTML> <HEAD> <title>メール送信フォーム</title> </HEAD> <BODY> <?php //メール送信先を指定 $to == "web@beworks-web.com"; //フォームの値を取得 if($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ //「magic_quotes_gpc=on」のときはエスケープ解除 if(get_magic_quotes_gpc()){ $v = stripslashes($v); } $v = htmlspecialchars($v); $sk = $v; } } else { exit(); } //メール本文を組み立て $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if($name != "" and $from != "" and $title != "" and $naiyou != ""){ if(mb_send_mail($to,$title,$naiyou,"From:$from")) { echo "メールを送信しました"; } else { echo "メール失敗です"; } } ?> </BODY> </HTML>

    • 締切済み
    • PHP
  • mb_send_mailで文字化け

    Windows環境でmb_send_mailを使い、メール送信のテスト を行っています。 文字コードの変換周りで、いろいろ試しているのですが、 うまくいきません。 Apache + PHP (Window)  ↓ メールサーバー(RedHat)  ↓ メール受信(Window) 上記の環境で、文字化けしないで、 メール送信するには、どうしたら良いのでしょうか? (コーディング例) mb_send_mail( $address, mb_convert_encoding($subject,"EUC-JP"), mb_convert_encoding($message,"SJIS"))

    • 締切済み
    • PHP
  • PHPの文字化け

    PHP4.3、Apache2.0.46を利用しています。 htmlタグ内でのテキストは正しく表示されるのですが returnやechoなどで表示させると文字化けしてしまいます。 PHPのスクリプトは全てEUCで記述されています。 化け方は、例を挙げると ※入力されたID、パスワードが正しくありません。 ↓ ※ュID鴻・若罩c障 のようになります。 php.iniの文字コードまわりの設定は output_buffering = Off magic_quotes_gpc = Off mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none となっています。 どうかお知恵をお貸しくださいませ。

    • 締切済み
    • PHP
  • phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません

    phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません。 php.iniの現時点における設定は、以下の通りです。 [mail function] ; For Win32 only. ;SMTP = localhost ;smtp_port = 25 ; For Win32 only. ;sendmail_from = ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "sendmail -t -i" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 ;mbstring.strict_encoding = Off なお、phpのスクリプトでは、mb_send_mail関数を呼ぶ直前に、  mb_language("ja");  mb_internal_encoding("utf-8"); を実行しております。 また、html部では、<meta…タグにおいて、charset=UTF-8の宣言を行い、 このhtml部を含むphpファイルは、文字コードUTF-8にて格納し直しました。 原因をいろいろ探ったのですが、自力では無理のようです。 原因と考えられる点をどうか教えて頂くようにお願い致します。

    • ベストアンサー
    • PHP
  • カタカナ小文字「ァ」の、検索時の文字化けで困っています。

    はじめまして。 現在、検索結果が表示されるページを制作しているのですが、その際、 カタカナ小文字の「ァ」が入っているキーワードで検索したときに、 検索キーワードの表示のところで、下記のように文字化けが起こってしまって、困っています。 (「ヴァージニティ」→「ヴ 璽献縫謄 」) Google検索しても、解決法を見つけることができませんでした。 magic_quotes_gpcの設定は、開発環境ではOff、本番環境ではOn(レンタルサーバのデフォルトの設定)にしているのですが、 if (isset($_GET['keyword'])) { $keyword = (get_magic_quotes_gpc()) ? $_GET['keyword'] : mysql_escape_string($_GET['keyword']); $keyword = mb_convert_kana($keyword, "aKV"); } のように、magic_quotes_gpcの設定が「ON」であるときと「OFF」であるときの両方の設定を記述しています。 PHP、データベース共に文字コードはEUCで統一しています。 レンタルサーバなので.htaccessを使用して、下記のように設定しています。 php_flag output_buffering off php_value default_charset EUC-JP php_value mbstring.language Japanes php_flag mbstring.encoding_translation on php_value mbstring.http_input EUC-JP php_value mbstring.http_output EUC-JP php_value mbstring.internal_encoding EUC-JP php_value mbstring.substitute_character none php_value mbstring.detect_order EUC-JP,SJIS,JIS,UTF-8,ASCII 文字化けが生じる、表示部分のphpの記述ですが、 if($keyword != ""){ $keyword = mb_convert_encoding($keyword, "EUC-JP"); echo htmlspecialchars(stripslashes($keyword)); } のように記述しています。 ちなみに、「ッ」のような他のカタカナ小文字が入っているキーワードでは、正常に検索結果が表示されます。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP でmb_send_mailが上手くいかない

    PHP初心者です。現在、自分のパソコンにXAMPPをインストールして、 Apacheを起動し、PHPのサンプルを勉強しいています。 mb_send_mail自体はTRUEで返ってくるのに、メーラーには何も届きません。 書籍やネットにあったサプルをいろいろ調べたのですが、 みな、同じ現象です。 php.iniの設定は下記の通りです。(phpは5.4.7) [mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury SMTP = localhost smtp_port = 587  <----25にしても変わりませんでした。 ; For Win32 only. http://php.net/sendmail-from sendmail_from = postmaster@localhost PHPのソース <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); if (mb_send_mail("cy0***@md.point.ne.jp", "テストメール", "これはテストです。", "From: chibikind***@yahoo.co.jp")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } ?>

    • 締切済み
    • PHP
  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP

専門家に質問してみよう