Perlで日本語メールを送信する。

SubjectとBodyをISO-2022-JP (JIS)に変換、
プラスSubjectをBase64エンコードしないと文字化けする。


(注) 最近のメーラーのほとんどはUTF-8のメールを認識できる。

*以下のファイルはUTF-8で保存

use strict;
use MIME::Base64;
use Encode qw(encode);


my $to = "to@example.com";
my $cc = 'cc1@example.com,cc2@example.com';
my $bcc = 'bcc@example.com';
my $from = 'from@example.com';
my $subj = 'サブジェクト';
my $body = 'ボディーです。';


#日本語メールのディフォルトのISO-2022-JP (JIS)に変換
$subj = encode('ISO-2022-JP', $subj);
$body = encode('ISO-2022-JP', $body);


#SubjectをBase64エンコードする
$subj = encode_base64($subj, '');
$subj = "=?ISO-2022-JP?B?$subj?=";


open(SENDMAIL,"|/usr/sbin/sendmail -t $to") || die 'Cannot run sendmail';
print SENDMAIL "From: $from\n";
print SENDMAIL "To: $to\n";
print SENDMAIL "Cc: $cc\n";
print SENDMAIL "Bcc: $bcc\n";
print SENDMAIL "Subject: $subj\n";
print SENDMAIL "MIME-Version: 1.0\n";
print SENDMAIL "Content-Type: text/plain; charset=iso-2022-jp\n";
print SENDMAIL "Content-Transfer-Encoding: 7bit\n";
print SENDMAIL "\n";
print SENDMAIL "$body\n";
close(SENDMAIL);