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

解決に至らなかったので再度お尋ねします。
CGIのコードを見てくださいますか。
http://hotpegasus.bov.jp/mail.txt
(必要な部分だけ表示しておりますので、そのままアップしても機能はしません)

改修した箇所は以下のです。
<meta http-equiv="Content-Type" content="text/html;charset=shift_jis">
&jcode'h2z_sjis(*contenido)
&jcode'convert(*subject,'sjis');
&jcode'convert(*infor,'sjis');
&jcode'convert(*contenido,'jis');
&jcode'convert(*res_msg,'jis');
print "Content-type: text/html;charset=shift_jis\n\n";

↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え

<meta http-equiv="Content-Type" content="text/html;charset=utf8">
&Jcode'h2z_utf8(*contenido)
&Jcode'convert(*subject,'utf8');
&Jcode'convert(*infor,'utf8');
&Jcode'convert(*contenido,'utf8');
&Jcode'convert(*res_msg,'utf8');
print "Content-type: text/html;charset=shift_utf8\n\n";

require 'jcode.pl'をuse Jcode;に書き換え
※jcode::" となっている箇所はありません

結果
メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。
どこが悪かったのでしょうか?
宜しくお願いします。

A 回答 (3件)

日本語文字を含むメールは、文字コードをISO-2022-JP(&#x2252;JIS)にするのが基本原則です。


また、ヘッダにASCII文字以外を使う場合はその部分のみをMIMEエンコードする必要があります。
SJIS、EUC、UTF-8を解釈できないメーラ(メールクライアント)はまだまだ多いです。
規格はずれの相当いいかげんなフォーマットでも適当に表示してくれるOutlook Expressでも UTF-8だと一部文字化けします。

この回答への補足

思ったよりも簡単に済ませるものじゃなかったんですね。
# 送信処理や# 申込者への返信メール様式はISO-2022-JPにし、
<meta http-equiv="Content-Type" や&Jcode'convertはutf8にし…
段々複雑になってしまいました。
どれが正しいのか、分からなくなってしまいました。
認識不足です…

補足日時:2009/06/16 13:30
    • good
    • 0

メールもUnicodeで送りたいのでしょうか?


それとも、メールは JIS(ISO-2022-JP)のまま送りたいのでしょうか?

メールをUnicdeにするのなら、

・ヘッダの文字コード
> print MAIL &mimeencode("Reply-To: $email")."\n";
> print MAIL &mimeencode("From: $email")."\n";
> print MAIL &mimeencode("Subject: $subject")."\n";

mimeencode は、JIS(ISO-2022-JP)でヘッダをエンコードします。
Unicode(UTF-8)にする場合は、
use Encode; しておいてから、
print MAIL encode("MIME-Header", "Subject: $subject")."\n";
などとします。

・本文の文字コード
> print MAIL "Content-Transfer-Encoding: 7bit\n";
> print MAIL "Content-Type: text/plain\; charset=iso-2022-jp\n\n";

これでは、本文はJIS(ISO-2022-JP)ということになっています。
本文のデータがUTF-8なのでしたら、ヘッダで
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=utf-8
を出力する必要があります。

あるいは、メールをJISで送るなら、
・mimeencode は UTF-8は扱えないので、$subject などは、UTF-8からあらかじめ JIS に変換しておく
・本文は、JISに変換したものを出力
する必要があるでしょう。

この回答への補足

アドバイスをありがとうございます。
HTMLはUTF-8でいきたいのでUnicodeで送るようにそちら様の指摘通り
以下を修正しました。

use Encode;

# 送信処理 ---------------------------------------
print MAIL encode("MIME-Header", "Reply-To: $email")."\n";
print MAIL encode("MIME-Header","From: $email")."\n";
print MAIL encode("MIME-Header","Subject: $subject")."\n";

print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "Content-Type: text/plain\; charset=UTF-8\n\n";

# 申込者への返信メール様式
print MAIL encode("MIME-Header","Reply-To: $main_mail")."\n";
print MAIL encode("MIME-Header","To: $email")."\n";
print MAIL encode("MIME-Header","From: $main_mail")."\n";
print MAIL encode("MIME-Header","Subject: $subject")."\n";

print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "Content-Type: text/plain\; charset=UTF-8\n\n";

※文字コードはUTF=8Nです。UTF=8だとブラウザで文字化けになっています。

結果は
受信したメールのタイトルだけ文字化けになっています。

HTMLの
<input type="hidden" name="subject" value="感想">
「value="感想"」がメールのタイトルになっております。
前回の文字化けは「諢滓Φ」
今回の文字化けは「?????^(3)」でした。
タイトル以外は文字化けはしておりません。
HTMLの文字コードもUTF=8Nです。

補足日時:2009/06/15 16:36
    • good
    • 0

http://oshiete1.goo.ne.jp/qa5039756.html で回答した通り。

あなたはおそらく「送信処理」サブルーチンの中の
&jcode'convert(*contenido,'jis');
までもutf8にいじってしまったのではないでしょうか。
意味もわからずやみくもにいじくらないで、ちゃんとそれぞれの行で何を行っているか理解しながら少しずつ変更していけばどこが悪いかわかるはずなんだけど。

この回答への補足

前回に引き続きアドバイスをありがとうございます。
送信や受信の
&jcode'convert(*contenido,'utf8');を&jcode'convert(*contenido,'jis');
に書き換えましたが、ダメでした。それと一つ一つずつ書き換えても文字化けは直りませんでした。

補足日時:2009/06/15 16:38
    • good
    • 0

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