電子書籍の厳選無料作品が豊富!

PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。

アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか?

mb_language("Ja");
$header = "From: reminder@aaa.com\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n";
$header .= "Content-Transfer-Encoding: base64";

$to = "aaa@gmail.com";
$subject = "送信テスト";
$body = "本文テスト本文テスト";

$subject = base64_encode($subject);
$subject = mb_convert_encoding($subject,"ISO-2022-JP");
$subject = "=?ISO-2022-JP?B?" . $subject . "=?=";
$body = base64_encode($body);
$body = mb_convert_encoding($body,"ISO-2022-JP");

$success = @mail($to,$subject,$body,$header);
if($success) print "成功";
else print "失敗";

A 回答 (2件)

まず確認ですが、gmailで発信したメールに関する質問ではなく、


gmailで受信したメールの問題ですよね。

わたしの理解では
base64_encode()とmb_convert_encoding()の順番が逆さま
じゃないですか。
このままだとヘッダーでiso-2022-jpを指定しているのに、
中身がおそらくはeuc-jpで矛盾を生じます。
アウトルックはそういう標準に従わないメールにも強いです。

またsubjectはbase64化が必要ですが、本文はiso-2022-jpならば、
Content-Transfer-Encoding: 7bit
にしてやればbase64化は不要ですね。

自分はgmailアカウントを持っていないので、自信ないですが、
日本語のメールは基本的に殆どがiso-2022-jpで送られている
はずですので、一般の日本語メールが読めるのなら、
iso-2022-jpでも構わないという事になります。
    • good
    • 0
この回答へのお礼

>base64_encode()とmb_convert_encoding()の順番が逆さま
これは携帯などの絵文字入力を変換させる為のもので問題ないようでした。

>本文はiso-2022-jpならば、Content-Transfer-Encoding: 7bitにしてやればbase64化は不要
これは不要でした。

確かな情報ではないのですが、「Gmail自体がbase64のエンコーディングに対応しておらず、Gmailで読めるようにするには、Content-Transfer-Encoding: 7bitを使う」ということでした。

皆様ご回答ありがとうございました。

お礼日時:2006/07/20 16:00

GメールではUnicodeエンコード使用しているので、Unicodeを扱えない携帯やWebメールでは文字化けします。

    • good
    • 0
この回答へのお礼

Gメールでの受信でうまくいかないのです。
ありがとうございます。

お礼日時:2006/07/18 19:43

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