こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

メールの文字化けについて

お世話になっております。
phpを利用し、Postfixにてメールを送信するプログラムを作成しました。
しかしながら、下記プログラムではタイトルに"日本語"を入れた場合、
"ThunderBird"でメールを受け取ると、
"◆◆◆◆◆◆◆◆◆◆"のように文字が化けてしまいます(本文は文字化けしません。)。
しかし、YahooWebメールではタイトル・本文に関わらず正常に文字が出力されます。

どの部分を修正すれば、日本語タイトル文を
文字化けさせず表示させることができるでしょうか?

サーバの文字コードは"EUC"となっています。
ご教授のほどよろしくお願いします。

// メール送信元を指定
$from = "mail";
$title = "メール届きましたか?";

// BCC値を決定します。
// メール本文を組み立てます。
$headers .= "From: $from\r\n";
$headers .= "Bcc: aiai@ngmail.com\r\n";
$headers .= ('Content-Type:text/html; charset=EUC-JP');

// 本文の値を決定します。
//$title2 = "=?iso-2022-jp?B?".base64_encode($title)."?=";
$naiyou2 = "仮ユーザID:$name\n
仮パス:$yoyakusha<br>
メールアドレスfrom:$from<br>
メールアドレスto:$email<br>
@ペイにて登録したユーザID:$title\n";

mail($email, $title, $naiyou2, $headers);

投稿日時 - 2006-07-24 15:37:32

QNo.2296256

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

がるです。
えっと…文字コードは、sjisではなくて、jisにしてください。sjisだと多分確定で読めないと思います。
あと、今しがた気づいたのですが。Content-typeは、text/htmlではなくて、text/plain菜のではないかと思うのですがどうでしょうか?

このあたりはPHPというよりはmail(関数ではなくて、いわゆるe-mail自体)の知識になるので。
そのあたりについて一度調べられてみると、また色々と得るものも多いかと思います。

また上手くいかなかったら書き込んでいただければ。

投稿日時 - 2006-07-25 17:09:41

ANo.2

'Content-Type:text/html;
のところで、コロンの後ろに半角スペースが必要です。

投稿日時 - 2006-07-24 23:38:17

ANo.1

がると申します。
とりあえず最低限3箇所修正をしてください。

まず、Content-typeでのcharsetはEUCではNGです。ISO-2022-JPにしてください。
次に、titleは、コメントアウトをはずしてtitle2を使ってください。
最後に、メール本文($naiyou2)を、マルチバイト関数 mb_convert_encoding を用いて、jisコードに変換してからmail関数をcallしてください。
これで文字化けはなおるかと思います。

ちなみに。マルチバイト関数にあるmb_send_mailはトラブルの話を散見しますので、使わないほうがよろしいかと思われます。

なぜ化けるのか、どうしてなおったかなどは、mailについて色々と調べられてみると、得られるものも多いかと思います。

投稿日時 - 2006-07-24 17:42:16

補足

お世話になっております。
早速お教え頂いたとおり、
下記内容に変更してみました。

変更を実施したところ、
ThunderBirdでメールを受け取ると、
タイトル・本文共に"?"表記になってしました。
yahoowebメールは問題ございません。

どこか設定が違っているところがありますでしょうか?
ご教授のほどよろしくお願いします。

// メール送信元を指定
$from = "mail";
$title = "予約完了メール";

// BCC値を決定します。
// メール本文を組み立てます。
$headers .= "From: $from\r\n";
$headers .= "Bcc: aiai@ngmail.com\r\n";
//$headers .= ('Content-Type:text/html; charset=EUC-JP');
$headers .= ('Content-Type:text/html; charset=ISO-2022-JP');

// 本文の値を決定します。
$title2 = "=?iso-2022-jp?B?".base64_encode($title)."?=";
$naiyou2 = "仮ユーザID:$name\n
仮パス:$yoyakusha<br>
メールアドレスfrom:$from<br>
メールアドレスto:$email<br>
@ペイにて登録したユーザID:$title\n";
$naiyou2 = mb_convert_encoding($naiyou2, "EUC-JP", "SJIS");

mail($email, $title2, $naiyou2, $headers);

投稿日時 - 2006-07-24 19:29:26

あなたにオススメの質問