アプリ版:「スタンプのみでお礼する」機能のリリースについて

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);

A 回答 (4件)

>教えてGOOで助けても=r />らっています


>改行するとこう

文字化けならわかるのですが文字の無い場所に挟まっているのは不思議ですね。
とりあえず$bodyの内容をファイルに出力するか表示して
その時点で問題の文字化けが発生しているか確認できますでしょうか?
    • good
    • 0
この回答へのお礼

ずっとお付き合い頂きまして、ありがとうございます。

ご指摘のとおり、データベースから持ってくるのではなく

送信用のファイルに直接 $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";
}

メールの受信内容
【文字化けはどう
改行してみました】

お礼日時:2011/03/04 10:29

>やはり、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 />謾ケ陦後☆繧九→縺薙≧

-----------------------------------------

補足日時:2011/03/01 15:10
    • good
    • 0

元々、全文文字化けしてるの?#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

補足日時:2011/03/01 10:41
    • good
    • 0

>データベースと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 への変換ではダメなんでしょうか?

恐れ入りますが、再度回答をいただければ幸いです。

補足日時:2011/02/28 11:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!