Mb_Send_mailで文字化け

このQ&Aのポイント
  • 外部のテキストファイル(EUC)のメールテンプレートを読み込んでMb_Send_mailでメール送信するプログラムを使っているのですが、文字化け問題が発生しています。
  • 必ずというわけではないので、原因がわかりません。PHPのバージョンは4.3.10で、PHPのソースはSJISです。レンタルサーバ側の設定はコードコンバートなどのオプションはOFFにしています。
  • メール内容に動的に日本語を入れているわけではないので、同じ内容が文字化けしたりしなかったりすることに悩んでいます。ヒントをいただけると助かります。
回答を見る
  • ベストアンサー

Mb_Send_mailで文字化け

外部のテキストファイル(EUC)のメールテンプレートを読み込んでMb_Send_mailでメール送信するプログラムを使っているのですが、どういうわけかたまに文字化けしてしまいます。(必ずというわけではありません。5回に1回くらい)必ずというわけではないので、ますますわけがわかりません。PHPのバージョンは4.3.10で、PHPのソースはSJISです。レンタルサーバ側の設定はコードコンバートなどのオプションはOFFにしていると説明されました。Mb_Convert_Encodingしてみたりいろいろしてみても状況は変わらず相変わらず「何通かに一通」文字化けします。メール内容に動的に日本語を入れているわけではないので、同じ内容が化けたり化けなかったりすることに悩んでしまっています。なにとぞヒントを戴きたく。宜しくお願いします。 function SendMail() { global $p; # FORM INPUT # メールテキストを開く if (!File_Exists(MAILTXT)) { return FALSE; } $fl = Fopen(MAILTXT, "r"); # メールタイトル(1行目)取得 $mail_sub = FGets($fl, 9182); # メール本文取得 $mail_msg = ""; $keys = Array('email'); while (!FEof($fl)) { $line = FGets($fl, 9182); foreach ($keys as $key) { $line = Str_Replace("[[$key]]", $p[$key], $line); } $mail_msg .= $line; } FClose($fl); # メールテキスト閉じる Mb_Language("Japanese"); $whom = $p['email']; #$mail_hed = "From: " . MAIL_FROM . "\nReturn-Path:" . MAIL_RETURN; /* 追加ヘッダ */ $mail_hed = "From: hogehoge.com\r\n"; $mail_hed .= "Bcc:hogehoge2.com\r\n"; $mail_hed .= "Reply-To:hogehoge3.com\r\n"; return Mb_Send_Mail($whom, $mail_sub, $mail_msg, $mail_hed); }

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

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

  • ベストアンサー
  • sisya
  • ベストアンサー率39% (97/245)
回答No.1

元の分と化けた文面などがあると、 どう受け取ってどう化けてしまったのかが判りやすいと思います。 文字化けの原因のほとんどは使用する文字コードが間違っているか 変換前の文字コードを間違えているかだと思います。 「何回かに一回」との事なので、 同じ文面では少々考え辛いですが、 php側で文字コードを判断する時に間違えているのではないかと思いますので、 色々変換を試してみて、結果を見てみる事をお勧めします。 参考までに、下記のコードではどのような化け方をしますでしょうか? $mail_msg = mb_convert_encoding($mail_msg, "JIS", "EUC, SJIS"); return mb_send_mail($whom, $mail_sub, $mail_msg, $mail_hed);

manta_matutoya
質問者

お礼

返信ありがとうございました。 いろいろ試しているうちに、 mb_internal_encoding ("EUC-JP"); を追加したら、なぜか治ったようです。 いまいちピンとこないですね。。 化け方は日本語が???????とはてながいっぱいになってしまっていました。 とりあえず、今は文字化けが治りました。丁寧な返答ありがとうございました。

関連するQ&A

  • mb_send_mail で一部文字化けします

    mb_send_mail で一部文字化けします。 URLやキーワードとかそういった文字をいれた変数です。 基本UTF8で作ってます。 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $subject = "てすと"; $to =$email; $header .= "From:admin@example.jp\n"; $header .= "Return-Path:admin@example.jp\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= "◆URL:"; $body .= $url[$count]; mb_send_mail($to,$subject,$body,$header);

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

    お世話になっております。 標題の通り、mb_send_mail でメールを送信したいのですが、iPhonoの純正メーラーで差出人名が文字化けしてしまいます。 thunderbirdやブラウザのWebメール・Androidのメーラーでは問題なく日本語で表示されています。 PHPファイルは、UTF-8です。 ざっくりですが、以下のソースで実装しています。 $mail = "hogehoge@gmail.com"; $sub = "日本語のタイトル"; $body = "日本語の本文"; $head = "From:日本語の差出人名 <info@hoge.hoge>\n"; mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($mail, $sub, $body,$head); iPhoneでも、差出人名以外の、タイトルや本文は文字化けしていません。 ネットで調べ、症状は少し違うのですが、mb_encode_mimeheader関数を使ってみたりしたのですが、症状は変わりませんでした。 iPhone側の設定の問題なのか、php側の問題なのか良く分かりませんでした。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • 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
  • メールの内容が文字化けします・・・

    <? 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
  • mb_send_mailでつまづいています

    $jimu_mail="hoge@hogehoge.com"; $return_path = '-f'.$jimu_mail; $rcd = mb_send_mail($mlto, $mlsb, $mlms, $mlfr, $return_path ); という記述があるのですが、mb_send_mailの5番目のパラメータの「$return_path」の部分がどういう働きをもつのか良く分からないのです。 PHP公式サイトのマニュアルには 「MTA のコマンドラインパラメータです。sendmailを使用する場合に正しいReturn-Pathを設 定する場合に便利です」 とありますが、正直言っている意味がわかりません・・・。 実は、以上の状態ですと、メール送信されなかったのですが、2行目を $return_path = $jimu_mail; と、'-f'を取り除いたら送信できるようになりました。 これらについて、 どうして「-f」を取り除いたら送信できるようになったのか、 また、マニュアルにある 「MTA のコマンドラ インパラメータです。sendmailを使用する場合に正しいReturn-Pathを設 定する場合に便利です」の 意味することを解説してくださる方がいらっしゃればとっても助かります。 よろしくお願いします。 環境はPHP Version 4.3.4 Apache/1.3.29 (Unix) です

    • ベストアンサー
    • 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
  • 携帯からメールを送ると文字化け・・・

    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
  • mb_send_mailの2重投稿を防止したい

    初めて質問させていただきます。 動作環境はPHP4.3.0になります。 <? $to = "test@test.com"; $subject = "テスト"; $addheader = "From: $_POST[mail]\n"; $msg = "*************"; $to = mb_convert_encoding($to, "SJIS", "EUC-JP"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $msg = mb_convert_encoding($msg, "SJIS", "EUC-JP"); $addheader = mb_convert_encoding($addheader, "SJIS", "EUC-JP"); mb_language("Ja"); mb_internal_encoding("SJIS"); mb_send_mail($to, $subject, $msg, $addheader); setcookie("formdata", $posted , time()-1200); }; ?> 上記の用に記述をして、メールが届くのは確認をしたのですがなぜか9割位の確立でメールが二通届きます。 mb_send_mailの前後にecho分で文字を表示させたのですが、ループしている気配もありません。 どなたかこの現象を回避できる方法をお知りでしたらご教授下さい。 何卒、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mb_send_mailに関して

    環境:Windows2008 Server R2 64bit/php5.3.22 教えて下さい。 Windows2008 Server R2 64bit 環境にてPHPを動作させ、mb_send_mail()関数を使って メールを送信しようと考えています。 PHPも問題なく動き、mb_send_mail()関数用にphp.ini も以下のようにメンテナンスし、記述も 問題ないかと思われますが、メールの送信ができません。。。 64bitでは何か設定が違うのでしょうか? 教えて頂きたいと思います。 《php.ini》   [mail function]  For Win32 only.          ← 32bit only とわざわざ記述がある為、64bit ではNG?  http://php.net/smtp  SMTP = XXXXXX  http://php.net/smtp-port  smtp_port = 25  For Win32 only.  http://php.net/sendmail-from  sendmail_from = XXX@XXX.co.jp 《記述内容》  <?php  $mailto = "XXX@XXX.co.jp";  $subject = "掲示板";  $content = "新規投稿がありました。 ☆☆☆";  $mailfrom = "From:mail@colcoat.co.jp";  mb_language("ja");  mb_internal_encoding("UTF-8");  if(mb_send_mail($mailto,$subject,$content,$mailfrom)){  }else{   echo "送信できませんでした";  }  ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう