[CGI覚書]フォームから飛ばすメールが文字化けinサンダーバード(>_<)

2011年4月18日

自分が作ったフォームじゃないのだが、7~8年くらい前のsjis仕様のCGIフォームの話です。
OutlookやGmailでは正常に見えているのですが、サンダーバードだけ、
本文が文字化けしております。菱形白抜きの?マークがうようよしてます(>_<) サンダーバードの方で文字コードをShift-jisに変換すると正常にはなりますが、 気になって色々調べたところ、 サンダーバードは、ヘッダーに設定されてる文字コード厳守で 表示させるので、文字化けしてしまうとのこと(>_<) OE等はそのへん融通を効かせて表示させてくれてるみたいです。 このへんIEとfirefoxの仕様とやっぱり似てますね(汗) <参考> ★Thunderbirdで文字化けを直す

Thunderbirdの開発側の見解としては,このようになるのは送信側の問題であり,受信側の問題ではないので,Thunderbirdでは対応しないそうです.Outlookなどでは,ヘッダでの文字コードの宣言を信用せず,本文の文字コードを解析して判断するそうです.(これも,Outlookが重い原因の一つですかねぇ)

結局うまくいかなかったですが、下のスレを参考に色々いじくってみました。
今までiso-2022-jpとかあまり意識してなかったんで、メールの文字コードの勉強には、多少なりました。

CGIフォームから飛ばすメールがMacのMailで本文だけ文字化け
ここで質問されている方は、

&jcode'convert(\$comment,"jis");

でうまくいったようです。

今回のプログラム中にも、以下の件名(Subject)の文字化け対策がされてて
こちらはうまくいっているようだったので、

&jcode'convert(*Subject,"jis");

真似して、

&jcode'convert(*comment,"jis");

&jcode'convert(\$comment,"jis");

に変えてみたのですが、だめでした。

ちなみに逆にshift-jisに揃えると、サンダーバードでは見えるようになったのですが、
OEで文字化けしていたようです。
それにメールの文字コードはそもそもiso-2022-jp(jis)が推奨なので、
sjis揃えはなしなんだなぁと後から気が付きましたが。

$WriteData .= "Content-Type: text/plain; charset=iso-2022-jp\n";

↓ ↓ ↓

$WriteData .= "Content-Type: text/plain; charset=shift-jis\n";

shift-jis揃えにした場合は、逆に件名のjis変換を削除しないと件名が文字化けする。

&jcode'convert(*Subject,"jis");