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(); }