Net::SMTP

SMTPクライアントモジュール。TLS接続やSMTP認証もサポートしているが、Net::SMTP::TLSの方が使いやすい。

use Net::SMTP;
パッケージをロードする。

my $smtp = Net::SMTP->new($host[, %options]);
$host:SMTPサーバのホスト名:ポート番号、または、IPアドレス:ポート番号。
   ポート番号のデフォルトは25。%options内のHostパラメタとは排他使用。
%options:主要なオプションは下記の通り
 Hello:HELO/EHLOコマンドに指定するドメイン名。
 Host:SMTPサーバのホスト名、または、IPアドレス。$hostとは排他使用。
 Timeout:タイムアウト時間、デフォルトは120秒。
 Debug:trueを指定するとSTDERRにデバッグメッセージを表示する。

 $smtp->hello($domain);
EHLOまたはHELOコマンドを実行する。コンストラクタにHelloパラメタを指定した場合は、実行不要。

$smtp->auth($username, $password);
SASL認証(SMTP auth)を行なう。
SMTP authの処理にバクがあるらしく、DIGEST-MD5をサポートしているサーバだと認証に失敗する。「何か」はやっているらしいが、サーバーログを見る限り認証試行していない。
SMTP authが必要な場合は、Net::SMTP_auth を使用すること(但し、SSL未対応)。Net::SMTP_authはNet::SMTPの派生モジュールで、使用方法は完全互換。
Net::SMTPSなるモジュールもあるが、authコマンドは Net::SMTPに依存しているのか同様の結果になる。

$smtp->mail($from);
メール送信を開始する
$from:送信元メールアドレス。localhostに送信する時は、ローカルユーザ名。指定したアドレスは、MAILコマンドと Fromフィールドの両方に使われる。

$smtp->recipient(@addresses);
受信アドレスを指定する。RCPTコマンドに使われる(省略可)。送信不可(例えばメールリレー出来ない)の場合は。falseを返す。

$smtp->to(@addresses);
送信先メールアドレス(Toフィールド)を指定する。

$smtp->cc(@addresses);
送信先メールアドレス(CCフィールド)を指定する

$smtp->bcc(@addresses);
送信先メールアドレス(BCCフィールド)を指定する

$smtp->data();
メール本文送信開始

$smtp->datasend($msg);
メール本文を送信する(複数回実行可)

$smtp->dataend();
メール本文送信終了

$smtp->reset;
メール送信を中止する

$smtp->quit;
ログアウトする

典型的には、下記の様にエラー検出する。

$smtp->mail($ENV{USER}) || print "Error: ", $smtp->message();
if ($smtp->to('postmaster')) {
	$smtp->data();
	$smtp->datasend("To: postmaster\n");
	$smtp->datasend("\n");
	$smtp->datasend("A simple test message\n");
	$smtp->dataend();
}
else {
	print "Error: ", $smtp->message();
}