Base64での送信でタイトルが環境により文字化け

このQ&Aのポイント
  • CGI(Perl)のメールフォームで、特定の文字列の組み合わせをエンコードしたものが、環境によりタイトルだけ文字化けする現象が発生します。
  • GmailとWindowsメールで文字化けし、Thunderbirdだと文字化けしないのですが、原因と対応がわかる方がいれば教示いただけませんか。
  • Shift_JISの5Cなどとは根本的に異なりそうですが・・・
回答を見る
  • ベストアンサー

Base64での送信でタイトルが環境により文字化け

CGI(Perl)のメールフォームで、 Base64エンコードでメール送信をするときに、 特定の文字列の組み合わせをエンコードしたものが、 環境によりタイトルだけ文字化けする現象が発生します。 GmailとWindowsメールで文字化けし、 Thunderbirdだと文字化けしないのですが、 原因と対応がわかる方がいれば教示いただけませんか。 Shift_JISの5Cなどとは根本的に異なりそうですが・・・ 以下、いくつかテストした文字列です。 「XXX」お問い合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?44CMWFhY44CN44GK5ZWP44GE5ZCI44KP44Gb44KS5Y+X44GR5LuY44GR44G+44GX44Gf?= Gmail:文字化け Windowsメール:文字化け Thunderbird:文字化けせず お問い合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?GyRCJCpMZCQkOWckbyQ7JHI8dSQxSVUkMSReJDckPxsoQg==?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 「XXX」おい合わせを受け付けました ↓ Subject: =?iso-2022-jp?B?GyRCIVYbKEJYWFgbJEIhVyQqJCQ5ZyRvJDskcjx1JDFJVSQxJF4kNyQ/GyhC?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 「お問い合わせを受け付けました」 ↓ Subject: =?iso-2022-jp?B?GyRCIVYkKkxkJCQ5ZyRvJDskcjx1JDFJVSQxJF4kNyQ/IVcbKEI=?= Gmail:文字化けせず Windowsメール:文字化けせず Thunderbird:文字化けせず 特定の一文字の問題ではないようなのですが・・・ またプログラム(一部抜粋)では下記のように変換しています。 ########################## use MIME::Base64; if($str =~ /[^!-~\s]/){ $str = encode_base64($str, ""); $str = '=?iso-2022-jp?B?' . $str . '?='; } ########################## よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

1番目のケースでは、文字化けするのが正しい。 UTF-8の文字列をbase64エンコードして、それに、=?iso-2022-jp?B? という嘘のコード名をつけたら文字化け(デコードしたUTF-8文字列を指定されたiso-2022-jpのエンコードと見なして無理矢理表示しようとする)のは正常な動作です。 改善としては、必ず文字コードをiso-2022-jpに変換してからbase64エンコードしてください。

Goody-goody
質問者

お礼

本番環境のためテストが遅くなってしまいすみません。 Jcode::convert(\$mailtitle,'jis'); がうまく変換されていなかったようで、UTF-8のままbase64エンコードしてしまってたようです。 指摘いただき気づきましたが、助かりました。 ありがとうございました。

その他の回答 (1)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

最初の Subject: =?iso-2022-jp?B?44CMWFhY44CN44GK5ZWP44GE5ZCI44KP44Gb44KS5Y+X44GR5LuY44GR44G+44GX44Gf?= は、UTF8 の 「XXX」お問い合わせを受け付けました をエンコードしています。なので、ISO-2022-JP に文字コードを変更してから encode_base64 すれば文字化けしなくなるはずです。 あるいは、 Subject: =?UTF-8?B?44CMWFhY44CN44GK5ZWP44GE5ZCI44KP44Gb44KS5Y+X44GR5LuY44GR44G+44GX44Gf?= としてもよいでしょう。

Goody-goody
質問者

お礼

本番環境のためテストが遅くなってしまいすみません。 Jcode::convert(\$mailtitle,'jis'); がうまく変換されていなかったようで、UTF-8のままbase64エンコードしてしまってたようです。 指摘いただき気づきましたが、助かりました。 ありがとうございました。

関連するQ&A

  • Gmailへのメール送信で文字化け

    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 "失敗";

    • ベストアンサー
    • PHP
  • Thunderbirdで転送時の文字化け

    Thunderbirdで転送しようとすると文字化けします。 楽天からのメール(文字コードISO-2022-JP)を転送したいのですが、 転送ボタンを押すとメール作成画面ですでに文字化けしています。 「以下ご予約が成立」が「$B!|!!0J2<$4M=」になりました。 また、その状態のままGmail当てに送ったら、「以下�竚癈鷭�」になりました。 上の2つが正しく見えるようにするにはどうすればいいか教えてください。

  • 同じとこのメールのタイトルが文字化け

    exciteのフリーメールを使ってます。 あるメルマガだけ、タイトル文字が=?ISO-2022-JP?B?GyRCM0owQhsoQg==?= DVD=?ISO-2022-JP?B?GyRCRkM9OBsoQg==?=という感じで、文字化けみたいに表示されるんです。 本文は大丈夫です。 そもそも文字化けという表現が合ってるのかどうかすらわからないんですが・・。 exciteメールは、メールの最後に、文字が正しく表示されないときは、文字コードを入れろ、と書いてはありますが、何のことやら・・。 exciteにきくのはどうしたらいいのでしょうか。 また、どなたかおわかりになった方がいたら、教えてください。

  • メールの件名が文字化け

    こんにちは。メールの件名が文字化けしてしまいます。エンコードはutf-8です。 ファイルもutf-8で保存しております。 同じソースコードを使用していますが、とあるAサーバーでは文字化けしないのですが、 とあるBサーバーですと文字化けを起こしてしまいます。 (1)現象は下記の通りです。 (文字化けした件名) =?utf-8?B?44GK5ZWP44GE5ZCI44KP44Gb?= (文字化けしていない件名) お問い合わせ (2)ソースコードを抜粋します。 ini_set("mbstring.internal_encoding","UTF-8"); $title = "サービスセンター"; $subject_register = "お問い合わせ"; ・ ・ 省略 ・ ・ $headers1 = "From: =?utf-8?B?". base64_encode($title). "?= <$mail_from>"; $subject = "=?utf-8?B?".base64_encode($subject_register)."?="; ・ ・ 省略 ・ ・ mb_language("uni"); mb_send_mail($mail_to,$subject,$body,$headers1) サーバー環境の問題ですと、php.iniの設定で何か必要なのでしょうか? お気づきの点がありましたら、些細なことでも結構ですので、ご教示して 頂けると助かります。よろしくお願いいたします。

    • 締切済み
    • PHP
  • Thunderbird での文字化け

    サンダーバード1.0.2を使っています。 HP上でメールのリンクをクリックすると、メーラーが立ち上がりますよね? その時に件名がある場合、それが文字化けしてしまうのです。 HPのソースで「mailto:info@mail.co.jp?Subject=お問い合わせ」となっている場合、件名が訳のわからない記号の羅列になってしまい正しく表示されません。 文字エンコードは受信も送信もISO-2022-JPにしています。どうすれば正しく表示されるようになるか教えて下さい。

  • Thunderbird(MAC)の文字化け

    MacbookAir(OX X Ver.10.10)のThunderbird(Ver.31.2.0)の 受信メールの一部に文字化けが起きており、対応できず困っています。 メール本文の文字エンコーディングはデフォルトで「日本語(ISO-2022-JP)」に なっているのですが、これを「UNICODE」に変えるとメール本文は文字化けが解消 しますが、メールタイトルが文字化けしてしまいます。フォーカスを当て直した時には 元の文字化けメールに戻ってしまいます。 ※ちなみのメール本文の文字化けは、文字全てが黒い菱型の中に「?」に化けており、  メールタイトルの文字化けは「$B?{C+$N>u・・・」の様になっています。 何かThunderbirdの設定で直せるものなのか、またアドオンなどを当てる必要がある のか、この辺をお教え頂きたく。 よろしくお願い致します。

  • base64encodeでの文字化けについて

    先日、PHPとjavascriptのエンコードについて質問をしました。 http://okwave.jp/qa/q8512040.html その後いろいろと試してみたところ、javascript上で 日本語の文字列に対してbase64_encodeをして、 base64_decodeをすると文字化けが起こりました。 ソースは以下の通りです。 <html> <head> <title>サンプル</title> <script type="text/JavaScript" src="base64.js"></script> </head> <body> <script type="text/javascript"> <!-- str="abcde12345あいうえお"; encode_str=base64encode(str); decode_str=base64decode(encode_str); document.write("元の文字列:"+str+"<br>変換後の文字列:"+decode_str); // --> </script> </body> </html> base64.jsは以下のサイトのものを使用しています。 http://www.onicos.com/staff/iz/amuse/javascript/expert/ 結果は以下の通りです。 元の文字列:abcde12345あいうえお 変換後の文字列:abcde12345BDFHJ 文字コードはUTF-8を使用しているのですが、他の文字コードで 試してみても文字化けします。 原因や対処方法がおわかりの方がいらっしゃれば、教えて下さい。 よろしくお願いします。

  • Thunderbird件名の文字化けについて

    いつもお世話様です。メールソフトThunderbirdでもう一つ質問があります。 ある特定のメールのレイアウト上の右側の件名表示だけが文字化けします。 メッセージペイン上は文字化けしません。 メールをダブルクリックして表示しても問題なしです。gmail等でも文字化けしません。 表示→文字のエンコーディングは(日本語-ISO-2022-JP)となっています。試しに他の 日本語エンコードにすると全て文字化けするのでこのままにしていますが、何か解決する 方法はあるでしょうか。ちなみに他の全てのメールは文字化けしていません。 (おそらくその特定のメールの件名のエンコードが特殊であると思われますが確認する 方法が分かりません)以上、よろしくお願いします。

  • yahooアドレスに自動返信。タイトル文字化け

    cgiとpealで作られている注文フォーム。 yahooアドレスに自動返信のメールを送ると件名の途中から文字化けします。 携帯アドレスにおくると化けません。 原因不明で困っています。 プログラムはまったくわからないのです。 件名 [自動送信]○○○○○○○、ご注文のご確認です。 となるべきところ、 [自動送信]○○○○○○○、ご注J 犬粒稜Д瓠璽襪任后# となってしまいます。 ↓こんなのはかいてありました。 &jcode::convert(\$subject,'jis'); &jcode::convert(\$message,'jis'); # # $subject = MIME::Base64::encode($subject); # chomp($subject); # $subject = "=?ISO-2022-JP?B?$subject?="; $subject = &add_encoded_word($subject, ""); #

    • ベストアンサー
    • CGI
  • メールの文字化け?

    特定の友人(ひとり限定)から来るメールのSubjectだけ 文字化け(?)します。本文は正常です。 私が送ったメールはあちらでは化けずに表示されている らしいのですが、友人からのメールを私の環境で表示する と化けます。 私の環境は、Windows98 SECOND EDITIONでメーラーは ポストペット。 友人は、会社のマシンなのでよくわからない(らしい)の ですが、Windowsでロータスノーツが導入されているそう です(が、専門のエンジニア任せらしく本人はナニも わからないそうです)。 実際の例としては、「あれれ?」という文が 「=?iso-2022-jp?b?GyRCJCIkbCRsISkbKEI=?=」で 出ます。 親しい友人なので、「今度の文字化けはなんだったの?」 などと冗談にしてしまえるので実害はありませんし、 友人のほうは会社から私用メールしているのでおおげさに 出来ませんが、理由がわかればと思います。 いったい、なぜなんでしょう?

専門家に質問してみよう