• ベストアンサー

phpからのメール送信が文字化け

phpでメールを送信できるようなりましたが、メールは無事に送信されるのですが、OutLookで受信すると文字化けしてしまいます。色々調べたんですがどうも解決できません。 phpのtextエディターはUTF-8設定にして記入しました。メールソフト(OutLook)受信のエンコードは色々試したのですが、文字化けしてしまいます。 どのように文字設定をすると文字化けしないのでしょうか。 「テスト」と言う文字を送信すると「eXg」となり表示されます。 よろしくご指導お願いいたします。 <?php $mailto="*******@yahoo.co.jp"; $mailsbj="テスト"; $mailbody="テスト"; $mailheader="From:*******@***.biglobe.ne.jp\nReply-To:*******@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); mb_language("ja"); mb_internal_encoding("UTF-8"); ?>

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

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

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

う~ん、#2で書いたとおりですが・・・ <?php $mailto="*******@yahoo.co.jp"; $mailsbj="テスト"; $mailsbj=mb_convert_encoding($mailsbj,"JIS","EUC-JP,SJIS"); $mailsbj=mb_encode_mimeheader($mailsbj,"JIS"); $mailbody="テスト"; $mailbody=mb_convert_encoding($mailbody,"JIS","EUC-JP,SJIS"); $mailheader="From:*******@***.biglobe.ne.jp\nReply-To:*******@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); mail($mailto,$mailsbj,$mailbody,$mailheader); ?> メールには76文字ルールとかいろいろ制約がありますので、 きちんと調べた方がいいですね。 ちなみにSJISの「テスト」をEUCでみると「eXg」と見える場合 あります

ityounomi
質問者

お礼

ありがとうございました。 あるサイトにmb_send_mailは文字化けの元凶ということが 書いてありました。mb_send_mailを使わないほうが良いのですね! mail関数では、文字化けしないで送信されました。 もっと勉強します。 お世話になりました。ありがとうございました。(^▽^)。。 ここ↓ http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91

その他の回答 (2)

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

原則にたちかえり、メール本文は7bit-jisで、subjectなどは ISO-2022-JPでエンコードしてください

ityounomi
質問者

お礼

参りました^^。全く文字化け解決できません。 送信されてくるメールのヘッダーを見てみますと、確かにご指摘の ようになっていました。 ------------------------------------------------- メールオプション内の記載されているもの Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit ------------------------------------------------- 送信されてくるメールは、件名、本文とも「テスト」と入力 しているのですが、届くのは「eXg」と文字化けされてます。 mb_language("ja"); mb_internal_encoding("utf-8"); の2行を取り除いても、やはり文字化けしています。 WEB状で色々調べても解決できませんが、この手の問題をすっきり 理解できるPHPの本をご存知でしたら紹介していただけると幸いです。 長時間の格闘はいつものことですが^^。48歳のおじさんでした。 <?php $mailto="*****@yahoo.co.jp"; $mailsbj="テスト"; $mailbody="テスト"; $mailheader="From:****@***.biglobe.ne.jp\nReply-To:****@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); $mailbody=mb_convert_encoding($mailbody,"swe7","utf-8"); $mailsbj=mb_convert_encoding($mailsbj,"ISO-2022-JP","utf-8"); mb_language("ja"); mb_internal_encoding("utf-8"); if(mb_send_mail($mailto,$mailsbj,$mailbody,$mailheader)){ print "成功"; } else{      print "失敗"; } ?>

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

送信するメールの中身のエンコードがUTF-8を明示的に指定してないのが原因だと思います。

関連するQ&A

  • mb_send_mailでUTF8なメールを送信した際に、受け取り側で文字化けする可能性は?

    PHPスクリプトも、MySQLもUTF8で作成し、次のmb_send_mailでUTF8な メールを送信した場合、受け取り手側で日本語が文字化けするリスクは どの程度でしょうか?(特殊文字や外国語フォントは例外として、 あくまで日本語フォントが、です) 理屈上は、受け取り手のメーラーがUTF8の受信に対応していなければ NGということなのでしょうが。 $mailto = "from@example.com"; $mailsbj = "件名"; $mailbody = "本文\r\n"; //メールで扱う言語をUTF-8に設定 mb_language('uni'); mb_internal_encoding("UTF-8"); $fromname = "差出人名"; $fromname = mb_encode_mimeheader($fromname); $headers = "From: \"" . $fromname . "\" <from@example.com>" . "\n"; //メール送信 mb_send_mail($mailto, $mailsbj, $mailbody, $headers);

    • ベストアンサー
    • PHP
  • mb_send_mail sendmailについて

    PHPが使える無料レンタルサーバーで会員管理画面を作ろうとしているものです。だいぶ完成してきて、残りは登録した人に会員登録したことをメールで自動送信することができるようになれば完成というところまできました。無料レンタルサーバーの利用についての説明の中ではsendmailは利用可となっています。私はメール送信のプログラムを作ったことがないので、しきりに本を読みながら悪戦苦闘しております。本の中のサンプルを参考に下のようなソースを書いて、テストしていますがダメでした。 $mailto="*****@***.biglobe.ne.jp"; $mailsbj="新規登録"; $mailbody="登録者ができました"; $mailheader="From:****@yahoo.co.jp\nReply-To:*****@***.biglobe.ne.jp\nX-Mailer:phpversion();" mb_language("ja"); if(mb_send_mail($mailto,$mailsbj,$mailbody,$mailheader)){ echo "メールの送信に成功"; } else{ echo "メール送信失敗"; } 利用している無料レンタルサーバ内のsendmailの説明の中には sendmailのパス:/usr/lib/sendmail と記入されています。 web上で色々調べてみましたが、どうも今一よくわかりませんでした。mb_send_mailは使えないと言うことでしょうか? もし、sendmailを使用してメール送信をする場合にはどんなソースを書けばよいのでしょうか。 どなたかご指導宜しくお願いいたします。

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

    ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • mail()について。Outlookで文字化けする

    phpの組み込み関数mail()を使用して自動メール送信機能を作っております。 Yahoo!メールでは正常に受信出来るのですが、Outlook(Express)では文字化けしてしまいます。 出来るだけ万能に受信させたいのですが、どのように対処すれば良いのでしょうか? ちなみに、以下、現状のソースを簡略化したものです。 ----------------------------------------------------------- $mail_to = "mail@test.com"; $message = "テストです。\nメールを送ります。"; $headers = 'From: test' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($mail_to, "タイトル", $message, $headers); ------------------------------------------------------------- どなたか解決策をご存知でしたら、御教授宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPメールフォームから機種依存文字を送信すると、文字化けしてしまう

    PHPのメールフォームを作成しましたが、下記2点で悩んでいます。 初心者で申し訳ありませんが、ご教授願いします。 PHP(PHP作成文字コードは「UTF-8」)でメールフォームを作成しました。 --------------------------------------- mb_language("Ja"); mb_internal_encoding("UTF-8"); $header = "From:" .mb_encode_mimeheader($guestName) ."<" .$guestEmail .">"; $mailto = "test@xxx.com"; $subject = "ご連絡ありがとうございます。"; $boRtn=mb_send_mail($mailto,$subject,$content.$content_guest,$header); --------------------------------------- (1)送信した結果、機種依存文字が化けてしまいました。 機種依存以外の文字は文字化けしません。 送信した機種依存文字は「ローマ数字やまるいちなど」 (2)また受信したメールのヘッダー部分を表示したら、 件名の日本語文字列が3行くらいに改行されてしまいます。 上記の現象(特に機種依存文字の送信)について、 記述ミスや足りない点など教えて下さい。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでスペイン語のメールフォームを作りたいけど文字化けします

    今スペイン語サイトを制作しています。 PHPで作成していますが、 送信された内容をOutlookでメール形式で受け取ると 文字化けしてしまいます。 受信メールを開いて言語をUTF-8にすれば文字化けは解消されますが、 他のパソコンだ解消されない場合もあります。 何か送信方法での解決方法はありますでしょうか? また、受信メールを開いたときに解消する他の方法はありますでしょうか? 教えてくださいお願いします!

    • 締切済み
    • PHP
  • PHPのメールフォーム文字化けについて

    PHP超初心者です。 前任者が退職し、急きょWEBを引き継ぐことになりました。 現在稼動中のサイトのメールフォームは、PHPで処理を行っているのですが、 フォーム入力後に表示する入力確認画面及び送信メールで、 日本語が文字化けを起こしてしまいます。 PHP内に記述されているのは、 if(phpversion() < "4.1.0"){ $_GET = $HTTP_GET_VARS; $_POST = $HTTP_POST_VARS; $_SESSION = $HTTP_SESSION_VARS; } なのですが、レンタルサーバーのPHPバージョンは5.2.8です。 言語及び内部エンコーディングは、 mb_language('Japanese'); mb_internal_encoding(UTF-8); と設定してありますので、文字化けはバージョンの違いによるものではないかと考えているのですが、なにぶん初心者でどのように修正をかければよいのか分かりません。 尚、動作には問題はありません。 初歩的な質問で大変恐縮ですが、どなたかご回答よろしくお願いいたします。 (初心者向けの分かりやすい回答でお願いします)

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

    PHPでメール送信フォームを用意し、「本文、件名」共に日本語で入力して送ってみたのですが送信結果が文字化けしてしまいます。「あ」と入力して送信すると「??」となってしまいます。 どなたか解決できるようアドバイスをください。 <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> <?php $mail_send = "ABCDEFG@y.co.jp"; //宛先 $mail_sub = $_POST["mail_sub"]; //件名 $mail_text= $_POST["mail_text"]; //本文 mb_send_mail($mail_send, $mail_sub, $mail_text); ?>

    • ベストアンサー
    • PHP
  • 【PHP】メール受信時の文字化けについて

    フリーのメーリングリスト http://www.k-sky.biz/ を使用しています。 phpファイルをサーバにアップロードし メールを送信し受信しましたが、 テスト送信と送ったところ、 文字化けして、 ?e?X?g???M と受信されました。 説明書どおり設定したのですが、 何度やっても文字化けします。 開発者様に問い合わせたのですが、 連絡がありません。 メール受信時の文字化けについて、 どのようなことが考えられますか? 素人で分かりづらい文章で大変すみませんが、 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでHTMLメールを送信、文字化けします。

    Mail/mime.php を利用してHTMLメールの送信をしようとしています。 試行錯誤をしているのですが、どうしても文字化けしてしまいます。 データベースから取得したデータをHTMLメールにして送信したいのですが、 このままでは、タイトルはきちんと送れていますが、本分が文字化けします。 何か抜けたり、設定が変だったりはありますでしょうか? ご教授お願いいたします。 以下にソースを記しています。 データベースとPHPのソースはどちらも【UTF-8】です。 /*-------------------ここから データベースより取得----------*/ $recipients //送信先 $sender //送信元 $Subject //タイトル $body //本文 /*--------------------ここまでデータベースより取得--------------*/ mb_language("japanese"); mb_internal_encoding("UTF-8"); require_once("Mail.php"); require_once("Mail/mime.php"); $params = array( "host" => "自ドメイン", "port" => 587, "auth" => true, "username" => "送信元アカウント", "password" => "********" ); $mailObject = Mail::factory("smtp", $params); $mimeObject = new Mail_Mime("\n"); $mimeObject -> setHTMLBody($body); $bodyParam = array( "head_charset" => "ISO-2022-JP", "html_charset" => "Shift_Jis" ); $body = $mimeObject -> get($bodyParam); $addHeaders = array( "To" => "$recipients", "From" => "$sender", "Subject" => mb_encode_mimeheader("$Subject") ); $headers = $mimeObject -> headers($addHeaders); $mailObject -> send($recipients, $headers, $body);

    • ベストアンサー
    • PHP

専門家に質問してみよう