Linux 上の Perl スクリプトで日本語メールを送信するのに半日かかったので、メモ。
落とし穴は、Subject の MIME エンコードでした。
まず、本文は Unicode で書いておくのが簡単かと思います。
UTF-8N (BOM 無しの UTF8)で書いておいて、ヘッダには、
Content-Type: text/plain; charset="utf-8"
と指定しておくのが楽。
あとはパイプで /usr/sbin/sendmail
に食わせれば OK.
ただし、日本語の Subject は UTF-8 で書いておいても化けます。
なぜなら、ヘッダは "Content-Type" の範疇じゃないから。
ヘッダはいわゆる MIME エンコードをしておく必要があります。
MIME エンコードは、Encode::MIME::Header でできます。
具体的に言うと、次のコードでできます。
use Encode qw(encode);
$subject = encode('MIME-Header-ISO_2022_JP', $hogehoge);
たぶん、スクリプト先頭で、
use utf8;
をしておく必要があるかもしれません。
最終的には次のようなコードを使いました。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode qw(encode);
my $text = sub {
open my $fh, '<', "./hogehoge.txt" or die $!;
local $/ = undef;
my $s = <$fh>;
close $fh or die;
return $s;
}->();
my $email = sub {
use Email::Simple;
return Email::Simple->new($text);
}->();
$email->header('To') = 'hogehoge@example.com';
$email->header('Subject') = encode('MIME-Header-ISO_2022_JP', $title);
{
open $fh, '|-', '/usr/sbin/sendmail -t' or die $!;
print $fh $email->as_string;
close $fh or die $!;
}
ご参考まで。