perl からメールを送信する。(特殊文字対応版)
ひょんなことで,perlからメールを自動送信する事になったので,覚書します。
perlからメールって,結構ネットに出てるんで,
簡単にいくかと思っていたら・・
特殊文字(例えば,①ⅱ㈱℡髙塚彅﨑德アイウエオ ㈱㈲彅ⅱ℡゛’など)は,
だいたい化けてしまいますよね。
特殊文字対応のメール送信を扱ってるところってなかなかないんですね。
ようやく試行錯誤して,見つけ出しました。
もしかして,漏れがあったりするかもしれないけど,
概ね大丈夫だと思いますよ。
あちこちのサイトを参考にしながらできたコードなので,
「あ,あそこに似てる?」みたいな感じになってると思います(ごめんなさい)。
許せない人は教えてください。即効消しますので・・
——————————————————-
#必要なライブラリ
use Unicode::Japanese;
use Net::SMTP;
require ‘./jcode.pl’;
require ‘./mimew.pl’;
※Unicode::Japaneseは,こちらから頂戴しました。
(http://search.cpan.org/~hio/Unicode-Japanese-0.40/lib/Unicode/Japanese/JA.pod)
※sendmailではなくNet::SMTPを使いました。
#メール送信プログラム
sub sendmail {
@prm = @_;
my $from = $prm[0];
my $to = $prm[1];
my $subject = $prm[2];
my $msg = $prm[3];
$subject = Unicode::Japanese->new($subject, ‘auto’)->euc; # mimeencodeがeucにしか対応していないらしい
jcode::h2z_euc(\$subject); #subjectには半角カタカナは化けます。
$subject = mimeencode($subject); #MIME エンコード
$msg =~ s/\r\n/\n/g;
$msg = Unicode::Japanese->new($msg, ‘auto’)->jis; #text/plain;charsetをutf8にする場合は”utf8″を指定する
$smtp = Net::SMTP->new($smtp_server, Hello=>”$smtp_server”);
$smtp->mail($from);
$smtp->to($to);
$date = &date;
$smtp->data();
$smtp->datasend(”Date:$date\n”);
$smtp->datasend(”From:$from\n”);
$smtp->datasend(”To:$to\n”);
# $smtp->datasend(”Cc:$cc\n”);
$smtp->datasend(”Subject:$subject\n”);
$smtp->datasend(”Content-Transfer-Encoding: 7bit\n”);
$smtp->datasend(”Content-Type: text/plain;charset=\”ISO-2022-JP\”\n”);
# $smtp->datasend(”Content-Type: text/plain;charset=\”utf-8\”\n”); #utf8
$smtp->datasend(”\n”);
$smtp->datasend(”$msg\n”);
$smtp->dataend();
$smtp->quit;
}
——————————————————-
ここで,大切なのは,通常のJcode(jcode)ではなくて,ありがたいライブラリUnicode::Japaneseを利用した事です。jcodeの変換では\x{3232}見たいな感じで表示されてしまいます。
これがなかったらと思うと,冷や汗でした。著作者の方に感謝いたします。
以上