• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlからメール送信で文字化け)

Perlからメール送信で文字化け

このQ&Aのポイント
  • Perl5.8からsendmailを使ってメール送信しています。
  • 髙や﨑が入ると文字化けします。
  • 文字化けしないようにする方法を教えてください。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.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で送った場合にはメールソフトによっては問題が出るかもしれないことは覚悟する必要があるかと思います。

ps5550
質問者

お礼

ありがとうございます。 文字化けすることなく送信できるようになりました。 Unidoceでなくとも表示できると思いこんでいたのですが、だめだったのですね。 助かりました。勉強になりました。