SMTP送信する(受信させる)Perlスクリプト

SMTP送信するPerlスクリプトを作りました(備忘録です)。
複数ユーザー(200以上)のテストを手動でやると発狂しそうなのでスクリプト化しました。
相手先サーバにメール受信させることが目的のスクリプトです。
状況によってはSPAMホストと認識される可能性があるのでご注意ください。
PerlモジュールのEncode、Net::SMTPが必要です(無い場合はインストールして下さい)。

スクリプトを実行する際、第一引数にファイル名を指定します。
ファイルのsyntaxは以下の通り

#Comment
User1<Delimiter>Password1
User2<Delimiter>Password2
...
User100<Delimiter>Password100

<Delimiter>はフィールド区切りでスペースまたはタブになります。
行頭に”#”があるとコメント行になります。
標準入力からデータを読み込ませる場合は

echo "User Password" | this-script.pl -

とすれば実行できます。

#!/usr/bin/perl

use strict;
use utf8;
use Encode;
use Net::SMTP;

my $server   = 'サーバのFQDNまたはIPアドレス';
my $from     = '送信者のメールアドレス';
my $to;
my $domain   = '受信者のドメイン名';
my $user;
my $password;
my $subject  = 'テストメール';
my $userfile = shift;
my $header;
my $smtp;

my $contents = '
テキストのメールです。
この内容がメール本文に含まれます。
';

$contents = Encode::encode( 'iso-2022-jp', $contents );
$subject  = Encode::encode( 'MIME-Header-ISO_2022_JP', $subject );

die "Usage: $0 [file]\n" unless $userfile;
open(IN, $userfile) || die "can't open file: $!\n";

while(<IN>){
    s/[\r\n]*$//;
    ($user, $password) = split(/[\t\x20]+/, $_, 2);
    if ( $user =~ /^#|^$/ ) { next; }

    $to     = "$user\@$domain";
    $header = "From: $from\n";
    $header .= "To: $to\n";
    $header .= "Subject: $subject ( $from -> $to )\n";
    $header .= "MIME-Version: 1.0\n";
    $header .= "Content-type: text/plain; charset=ISO-2022-JP\n";
    $header .= "Content-Transfer-Encoding: 7bit\n\n";

    print Encode::encode( 'utf-8', "$to: SMTP接続 " );
    $smtp = Net::SMTP->new( $server );
    if ( $smtp ) {
        $smtp->mail( $from );
        $smtp->to( $to);
        $smtp->data();
        $smtp->datasend( $header );
        $smtp->datasend( $contents );
        $smtp->dataend();
        $smtp->quit;
        print Encode::encode( 'utf-8', "→ 送信完了\n" );
    } else {
        print Encode::encode( 'utf-8', "→ 失敗(Abort)\n" );
    }

}
close(IN);
exit;