Perlでメール鯖を操ってメールを送ってみる。

ソース自体はEUC-JPで。

#!/usr/local/bin/perl
use strict;
use CGI::Carp qw ( fatalsToBrowser );
use CGI;
my $q = CGI->new;
use MIME::Entity;
use MIME::Words qw ( :all );
use Jcode;
my $j = Jcode->new;

# 本文を作る。
my $data = <<"EOE";
本文第一行目
日本語万歳
EOE

# メールを作る。
my $mime = MIME::Entity->build(
	From=>encode_mimeword($j->set('送信者'=>'euc')->jis, 'B', 'iso-2022-jp').'<from@example.jp>',
	To=>encode_mimeword($j->set('受信者'=>'euc')->jis, 'B', 'iso-2022-jp').'<to@example.jp>',
	Subject=>encode_mimeword($j->set('メールのサブジェクト'=>'euc')->jis, 'B', 'iso-2022-jp'),
	Data=>$j->set($data=>'euc')->jis,
	Type=>'text/plain;charset="iso-2022-jp"',
	Encoding=>'7bit'
);

# デバッグ用表示
print $q->header;
print $q->start_html;

# SMTP鯖に接続する。
use Net::SMTP;
my $smtp = Net::SMTP->new(
	'example.jp',
	Hello=>'example.jp', # 送信者のメールアドレスの@以降
	Debug=>1 # 念のため
);

# 認証する。
$smtp->auth(
	'username',
	'password'
);
$smtp->mail('from@example.jp'); # 本当の送信者
$smtp->to('to@example.jp'); # 本当の受信者。複数の場合は、列挙する。
# $mstp->to('mail1', 'mail2');
$smtp->data(); # データ送信開始の宣言
$smtp->datasend($mime->stringify); # さっき作ったメールを送る。
$smtp->dataend(); # データ送信終了の宣言
$smtp->quit; # 接続の終了

# デバッグ
$q->pre($mime->stringify);
$q->end_html;