目次

内容

参考

使い方

  • メールアドレスの一覧をemails.txtに保存
    • メールアドレスを改行で区切っていれる
    • 余計な情報は入れない
  • 変数を適宜修正
$server
利用するサーバ
$mailFrom
メール送信者(日本語使用不可)
$mailTitle
メールタイトル
$mailBody
EOFの部分まで直に入力

確認している問題点

スクリプトの内容

  • UTF-8で保存すること!
    #!/usr/local/bin/perl -w
    
    use strict;
    use warnings;
    use Net::SMTP;
    use Encode;
    use utf8;
    my $jis = find_encoding( "jis" );
    
    ###==============================================================================
    ### 初期設定
    ###==============================================================================
    
    my $server    = "localhost";
    my $mailFrom  = 'user@host.co.jp';
    my $mailTitle = "題名";
    my $emailList = "emails.txt";
    my $mailBody = <<'EOF';
    
    メール本文をここに挿入
    
    EOF
    
    ###==============================================================================
    ### 処理開始
    ###==============================================================================
    
    ### メールアドレスの確認
    my @emails;
    {
        open( my $fhIn, $emailList ) || die( "Can't open email list" );
        while( <$fhIn> ){
            chomp;
            next unless $_;
            push( @emails, $_ ) if( isEmail( $_ ) );
        }
        close $fhIn;
    }
    
    ### メールアドレス毎に送信処理
    my $count;
    foreach my $mailTo ( @emails ){
        print sprintf( "%04d", ++$count ) . ": $mailTo\n";
        # オブジェクトの作成
        my $SMTP = Net::SMTP->new( $server );
    
        #ヘッダ部の組み立て
        $SMTP->mail( $mailFrom );
        $SMTP->to( $mailTo );
    
        #データ部の組み立て
        $SMTP->data();
        $SMTP->datasend( "From:$mailFrom\n" );
        $SMTP->datasend( "To:$mailTo\n" );
        $SMTP->datasend( "Subject:" . encode( $jis, $mailTitle ) . "\n" );
        $SMTP->datasend( "Mime-Version: 1.0\n" );
        $SMTP->datasend( "Content-type: text/plain; charset=ISO-2022-jp\n" );
        $SMTP->datasend( "Content-transfer-encoding: 8bit\n" );
        $SMTP->datasend( "\n" ); # ヘッダとボディの境目
        $SMTP->datasend( encode( $jis, $mailBody ) );
        $SMTP->dataend();
        $SMTP->quit;
        
        # 少し待つ
        sleep 1;
    }
    
    ### 終了
    exit;
    
    ###==============================================================================
    ### 処理開始
    ###==============================================================================
    
    sub isEmail{
        my $mail_regex =
            q{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\} .
            q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][} .
            q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x} .
            q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-} .
            q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(} .
            q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0} .
            q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*} .
            q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,} .
            q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[} .
            q{^\x80-\xff])*\]))*};
        return ( $_[0] =~ /$mail_regex/ ) ? 1 : 0;
    }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (442d)