- ベストアンサー
PHPでHTMLメールを送信、文字化けします。
- PHPでHTMLメールの送信を試みていますが、文字化けが発生します。
- データベースから取得したデータをHTMLメールに変換して送信したいが、本文が文字化けします。
- Mail/mime.phpを使用してHTMLメールを送信する際に、文字化けの問題が起こっています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>教えてGOOで助けても=r />らっています >改行するとこう 文字化けならわかるのですが文字の無い場所に挟まっているのは不思議ですね。 とりあえず$bodyの内容をファイルに出力するか表示して その時点で問題の文字化けが発生しているか確認できますでしょうか?
その他の回答 (3)
- saintandre
- ベストアンサー率31% (194/607)
>やはり、UTF-8 への変換ではダメなんでしょうか? #1の補足で書かれたのは「"html_charset" => "Shift_Jis"」を 「"html_charset" => "UTF-8"」に変更した 後の結果なのでしょうかそれとも前の結果なのでしょうか? また変更した後でしたら その前はどのような結果になっておりましたでしょうか? あと文字化けとは別の話ですが改行したい場所に<br>は 入れておられますでしょうか? HTMLメールですので入れないと改行されないとおもいます。
補足
回答ありがとうございます 宜しければ、引き続き回答頂ければ幸いです。 以下、補足説明させていただきました。 改行は 【 \n 】→【 <br /> 】に変更し 本文 を以下の文章でテストしました。 ----------------------------------------- 教えてGOOで助けてもらっています 改行するとこう ----------------------------------------- $bodyParam = array( "head_charset" => "ISO-2022-JP", "html_charset" => "UTF-8" ); 上のソースを 【html_charset" => "UTF-8"】にすると ----------------------------------------- 教えてGOOで助けても=r />らっています 改行するとこう ----------------------------------------- 上のソースを 【html_charset" => "shift_jis"】にすると ----------------------------------------- 謨吶∴縺ヲGOO縺ァ蜉ゥ縺代※繧・r />繧峨▲縺ヲ縺・∪縺・br />謾ケ陦後☆繧九→縺薙≧ -----------------------------------------
- BellBell
- ベストアンサー率54% (327/598)
元々、全文文字化けしてるの?#1の補足に書かれたように、一部が文字化け? #1の補足で改行が\nになってるのは気になるけど、DB内に\nとして格納されてるってこと? その時点で何か変。 ご使用のメーラはなんです? 受信したヘッダ情報の文字コードは何になってました? メーラ上で文字コードを変更すると、文字化けせずに読める文字コードとかは見つからなかった?
補足
回答ありがとうございます。 テストに使用しているメーラーは、 Windows Live メール ドコモの携帯 iPhone です。 メールの文字コードは 【Content-Type: text/html; charset="UTF-8"】 と表示しています。 Windows Live メールでは、【UTF-8】で認識していました。 ご指摘のように【EUC】【シフトJIS】などにメーラーのエンコードを変更してみましたが もっとひどく、どれも読めませんでした。 元の文字列は、データベースに格納している【UTF-8】のデータです。 以下のように<br />と変更すると改行は出来るようになりました。 ただ、文字化けは治りません。 $mimeObject = new Mail_Mime("\n"); ↓↓↓↓ $mimeObject = new Mail_Mime("<br />"); もし宜しければ、引き続き回答お願いいたします。m(__)m
- saintandre
- ベストアンサー率31% (194/607)
>データベースとPHPのソースはどちらも【UTF-8】です。 そうしますと以下のソースの"html_charset"の部分も"UTF-8"に するべきではないでしょうか? $bodyParam = array( "head_charset" => "ISO-2022-JP", "html_charset" => "Shift_Jis" );
補足
すみません。 よく見ないで補足をつけましたが、 ----------------元の文章------------ 到津本店 200円セール開催! 期間中は、 1パック200円でご提供します! ------------------------------------ ----------------UTF-8 へ変換後------------ 到津本店¥n200円セール開催!¥n¥n期間中は、¥n1パック200円��=n�ご提供します! ------------------------------------ やはり、UTF-8 への変換ではダメなんでしょうか? 恐れ入りますが、再度回答をいただければ幸いです。
お礼
ずっとお付き合い頂きまして、ありがとうございます。 ご指摘のとおり、データベースから持ってくるのではなく 送信用のファイルに直接 $body を記入したら 文字化けも変な所に変な物も入りませんでした。 (以下のソース) 原因はデータベースに入れる時に上手くいってないと、 原因の切り分けができました。 今度はデータベースに入力する所を検証してみます。 何日もお付き合いいただきましてありがとうございました。 本当に助かりました。 また、教えてくださいと投稿するかもしれないので よろしくお願い致します。 $sender = "***@***.net";//送信元 $recipients = "***@***.com";//送信先 $Subject = "テストで送信"; $body = "文字化けはどう\n改行してみました"; $params = array( "host" => "***.net", "port" => 587, "auth" => true, "username" => "***@***.net", "password" => "****" ); $mailObject = Mail::factory("smtp", $params); $mimeObject = new Mail_Mime('<br />'); $mimeObject -> setHTMLBody($body); $bodyParam = array( "head_charset" => "ISO-2022-JP", "html_charset" => "UTF-8" ); $body = $mimeObject -> get($bodyParam); $addHeaders = array( "To" => "$recipients", "From" => "$sender", "Subject" => mb_encode_mimeheader("$Subject") ); $headers = $mimeObject -> headers($addHeaders); print "<hr />".$body."body<br />"; $mailObject -> send($recipients, $headers, $body); if(send){ echo "OK"; } else{ echo "NO"; } メールの受信内容 【文字化けはどう 改行してみました】