SMTPオブジェクトへのメールアドレス設定の留意点
メール送信する時、SMTPオブジェクトのtoメソッドに複数の送信アドレスを配列で渡します。
その時、配列の中に不正アドレスがあっても、通常、正しいアドレスには送信がされます。
しかし、以下の3種類のアドレスのいずれかがあると、全滅するのです(正しいアドレスにも送信されない)。
- 「@」単独
- 「xxx@」ドメイン名なし
- 「@yyy.co.jp」ユーザー名なし
以下のように間違って「@, xxx@, @yyy.co.jp」を指定してしまう場合、送信が全滅する。
my $mailto = 'aaa@bbb.co.jp, @, xxx@, @yyy.co.jp'; # 複数のアドレスを、文字列内リストで表現 my @mailto = split(',', $mailto); # 複数のアドレスを、配列変数リストで表現 #メールヘッダー設定 my $header = << "MAILHEADER"; To: $mailto Subject: $subject : : #メール送信 my $smtp = Net::SMTP->new('mailhost'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } $smtp->to(@mailto);
つまり、メールアドレスをDBや画面入力から持ってくるとき、アドレスにユーザ名やドメイン名がちゃんと入っているかのチェックが必要ということです。(しかし、メールアドレスの正規表現は怒涛です。)
尚、SMTPモジュールを使ったメール送信サンプルは以下に