Sendmailの文字化けについて
以前にも同じ質問をしたのですが、いまいち解決していないので、もう一度質問させて頂きます。
ホームページでsendmailをつかってフォームより記入してもらった内容を自分のところと確認メールとして記入した人のところに送るようにしていますが、確認メールが文字化けすることがあるようです。
しかし、全ての人に対して化けるというわけではなく、ほとんどの場合は大丈夫なようですが、一部の人に対してだけ化けるようです。
関係しそうな部分を大まかに書くと下記のようにしておりますが、間違っているでしょうか?
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer,
$ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$xx =$value;
&trans;
$value = $xx;
}
sub trans{
$from='[@01-9A-Za-z._-]';
$to='[@01-9A-Za-z._-]';
&jcode'convert(*xx, 'euc');
&jcode'convert(*from, 'euc');
&jcode'convert(*to, 'euc');
&jcode'tr(*xx, $from, $to);
&jcode'convert(*xx, 'sjis');
}
&jcode'convert(*message,'jis');
if (!open(MAIL,"|$sendmail $mail_address")) {&error;}
&jis("Subject: $mailname"); print MAIL "$msg\n";
print MAIL "To: $mail_address\n";
print MAIL "From: $mailfrom\n";
print MAIL "\n";
print MAIL "$message";
close(MAIL);
sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis');}
お礼
ありがとうございました、頂いた回答をヒントに以下のようにして解決しました。 use Jcode; $subject = Jcode::convert( $subject, "jis", ""); $contents = Jcode::convert($contents, "jis", "");
補足
回答ありがとうございます。 普通のjcode.plですが、メール送信の日本語文書はHTMLのjavascriptで1行入力の文字列をencodeURIしてcgiのパラメータにしています。 cgiではこの文書を蓄積してメール送信しています。 日本語はUTF-8コードの可能性があります、encodeURIの変換又はその後でjisかsjisでcgiに渡せないでしょうか?