Perlでメール送信

Perlでメール送信するプログラムを書いたのでメモ。

メールを送信する方法はいくつかあるらしいが、
今回はNet::SMTPモジュールを使っている。

まずはコードの先頭で、Net::SMTPモジュールを使うことを宣言する。

use Net::SMTP

メールを送信するには、以下のようにSMTPオブジェクトを生成して各データを渡すことで実現できる。

my $host = SMTPサーバ;
my $from = 差出人;
my $to = 宛先;
my $subject = メールタイトル;
my $message = 本文;
my $header = << "MAILHEADER";
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit
 
MAILHEADER
 
#オブジェクト作成
my $smtp = NET::SMTP->new($host);
 
#ヘッダ組み立て
$smtp->mail($from);
$smtp->to($to);
 
#データ組み立て
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
 
#メール送信
$smtp->dataend();
#SMTP接続終了
$smtp->quit;

ここで注意しないといけないのが、文字コードらしい。
電子メールでよく使われる文字コードは「iso-2022-jp」みたいなので、コレにあわせる。

#開発環境がeuc-jpの場合(適宜変えてください)。
encode($message, 'euc-jp',"iso-2022-jp");

ヘッダーに関してはさらにややこしいらしく、BASE64というエンコード方法を使って、これらの文字をASCIIに変換し、ヘッダに埋め込む方法を規定しているらしい。

形式
=?<charset>?<method>?<エンコードされたヘッダ文字列>?=
Perlでのエンコード方法
encode('MIME-Header-ISO_2022_JP', $subject);

これでようやく文字化けさせずに送信できるみたいです。
エンコードのところはあってるのかわかりません。。。

参考

http://perldoc.jp/docs/modules/libnet-1.12/Net/SMTP.pod
http://homepage3.nifty.com/hippo2000/perltips/perlmail.htm#1.2
http://ja.wikipedia.org/wiki/ISO-2022-JP
http://www.kanzaki.com/docs/jis-mail.html#MIME-header
http://d.hatena.ne.jp/C_L/20070116/1168932085