- ベストアンサー
Perlからメール送信で文字化け
- Perl5.8からsendmailを使ってメール送信しています。
- 髙や﨑が入ると文字化けします。
- 文字化けしないようにする方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
根本的には perl の問題ではありません。 「髙」や「﨑」といった文字は、JIS(ISO-2022-JP)では規定されていないため、 ISO-2022-JPのメールに入れることはできないのです。 文字コードがUnicodeであれば、「髙」や「﨑」を表現できますので、 ・perlのスクリプトを、Unicode(UTF-8)で記述するようにする ・メールのcharset を UTF-8で送信するようにする ・文字コードの変換を、perl4時代の古いライブラリ(Unicode非対応)である「mimew.pl」や「jcode.pl」ではなく、perl5世代の「Encode.pm」を使う という対応になるかと思います。 ---ここから--- #!/usr/bin/perl use strict; use utf8; use Encode; my $sendmail = '/usr/lib/sendmail'; print "Content-type: text/html\n\n test\n"; my $out; if (!(open($out,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print $out "To: xxxx\@hogehoge.co.jp\n"; print $out "From: xxxx\@hogehoge.co.jp\n"; print $out "Reply-To: xxxx\@hogehoge.co.jp\n"; my $mail_subject = "サブジェクト 髙﨑"; $mail_subject = encode('MIME-Header', $mail_subject); print $out "Subject: $mail_subject\n"; print $out "Mime-version: 1.0\n"; print $out "Content-Type: text/plain\; charset=\"UTF-8\"\n"; print $out "Content-Transfer-Encoding: 8bit\n\n"; my $honbun = "メール本文 髙﨑"; $honbun = encode("UTF-8", $honbun); print $out "$honbun\n"; close($out); ---ここまで--- といった形でしょうか。 ただし、最近はまず大丈夫だと思いますが、 「日本語のメール」としては、ISO-2022-JPで送るのが主流であり、UTF-8で送った場合にはメールソフトによっては問題が出るかもしれないことは覚悟する必要があるかと思います。
お礼
ありがとうございます。 文字化けすることなく送信できるようになりました。 Unidoceでなくとも表示できると思いこんでいたのですが、だめだったのですね。 助かりました。勉強になりました。