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);
No.4ベストアンサー
- 回答日時:
>教えてGOOで助けても=r />らっています
>改行するとこう
文字化けならわかるのですが文字の無い場所に挟まっているのは不思議ですね。
とりあえず$bodyの内容をファイルに出力するか表示して
その時点で問題の文字化けが発生しているか確認できますでしょうか?
ずっとお付き合い頂きまして、ありがとうございます。
ご指摘のとおり、データベースから持ってくるのではなく
送信用のファイルに直接 $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";
}
メールの受信内容
【文字化けはどう
改行してみました】
No.3
- 回答日時:
>やはり、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 />謾ケ陦後☆繧九→縺薙≧
-----------------------------------------
No.2
- 回答日時:
元々、全文文字化けしてるの?#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
No.1
- 回答日時:
>データベースと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 への変換ではダメなんでしょうか?
恐れ入りますが、再度回答をいただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
ファイルから読み取った改行文...
-
データベースから取り出したテ...
-
jsp 改行コードで改行させて表...
-
C++で空Enterの入力を判...
-
【VBA】エクセルで最後の不要な...
-
VBAでCSVをExcelに取り込む時に...
-
変数の中の改行コードをBRタグ...
-
fscanfについて
-
アスキーコードへの変換につい...
-
最終行の改行について
-
ファイル内の1行(レコード)から...
-
JAVA System.out.println の ...
-
改行を読み飛ばす
-
テキストファイルから改行コー...
-
C# csvでセル内で改行するには
-
COBOLの改行
-
秀丸の正規表現で複数行にわた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
COBOLの改行
-
改行について
-
最終行の改行について
-
C++で空Enterの入力を判...
-
【VBA】エクセルで最後の不要な...
-
jsp 改行コードで改行させて表...
-
C++でのCRLFについて
-
ファイルから読み取った改行文...
-
テキストファイルから改行コー...
-
ExcelVBAでメールを作成してメ...
-
awkで改行を除いて文字列を抜き...
-
エクセルVBA 文字列領域が不足...
-
VBAでCSVをExcelに取り込む時に...
-
コンボボックスの項目中に改行を
-
JavaDoc コメントの改行について
-
Excel VBAからBeckyを起動して...
-
改行を読み飛ばす
おすすめ情報