<div class="section">
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