小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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モジュールを使ったメール送信サンプルは以下に