
【永久保存】大量の宛先に一斉個別メールを送るスクリプト
こんにちは〜インフラエンジニアのtamolabです!皆さんは業務で複数人の人に一斉メールを送る場合どのように実施しておりますでしょうか?たくさんの人にメールを送るには「宛先にたくさん入れる」場合が良い時もあれば、「宛先は個別にする」場合がいい時もあります。今回は後者の「宛先を個別にする」場合を想定して、便利なスクリプトを紹介します。
1. ユースケース
主に以下のようなユースケースがあるかと思います。これを使えば10,000人であろうと1,000,000人であろうと短時間でミスなしに確実にメール送信ができます。
・サーバのスクリプト上で、エラー時に自動でメール送信したい。
・複数人に案内メールを出したい。
・ヒューマンエラーなしに完璧にメール送信したい。
2. 動作環境
このスクリプトは以下の二点が整っていれば動作します。
・Perl (5.16系)が動作する環境
・sedmailが動作する環境
3. ソースコード
【ディレクトリ構成】
ディレクトリ構成は下記のようになります。
【userlist.txt】
ここにはメールのドメイン以外の部分(AAA@gmail.comのAAAの部分)を改行区切りで記載します。実施にメールを送る対象となります。
a-account
b-account
c-account
d-account
e-account
【subtitle.txt】
メールのタイトルを記載ます。
【重要】XXXXに関するアンケート回答のご協力依頼
【body.txt】
メールの本文を記載します。
いつもお世話になっております。
XXXXです。....
【main.pl】
「to」「from」「cc1」「cc2」「bcc」などは適宜変更してください。userlist.txtのアカウントに「@gmail.com」を付与した形で、toに指定してメール送信します。ドメイン部分を変えることもできるので、その場合も本コードを直接編集してください。
#!/usr/local/bin/perl5.16.3
require "jcode.pl";
require "mimew.pl";
#Description
$sendmail = '/usr/sbin/sendmail -t -i';
$subjectfile = "subject.txt";
$bodyfile = "body.txt";
$userlist = "userlist.txt";
#Sender etc...
$from = 'from@XXXX.co.jp';
$cc1 = 'cc01@XXXX.co.jp';
$cc2 = 'cc02@XXXX.co.jp';
#$bcc = '';
#$reply = '';
open(SUBJ,"<$subjectfile");
$subj = <SUBJ>;
close(SUBJ);
open(BODY,"<$bodyfile");
foreach(<BODY>){
$msg .= $_;
}
close(BODY);
#-----------------------------------------------------------------
sub sendMail {
($to, $cc1, $cc2, $bcc, $subj, $msg) = @_;
&jcode::convert(\$subj, "jis");
$subj = &mimeencode($subj);
jcode::convert(\$msg, "jis");
open(SENDMAIL, "|$sendmail -f $from") || die "sendNoticeMail:$!\n";
print SENDMAIL "From: $from\n";
print SENDMAIL "To: $to\n";
if($bcc ne ""){
print SENDMAIL "Bcc: $bcc\n";
}
if($cc1 ne ""){
print SENDMAIL "Cc: $cc1, \n";
}
if($cc2 ne ""){
print SENDMAIL "Cc: $cc2\n";
}
if($reply ne ""){
print SENDMAIL "Reply-To: $reply\n";
}
print SENDMAIL "Subject: $subj\n";
print SENDMAIL "\n";
print SENDMAIL "$msg\n";
close(SENDMAIL);
}
#-------------------------------------------------------------
open(TO,"<$userlist");
foreach(<TO>){
chomp;
sleep 2;
$to = "$_\@gmail.com";
&sendMail($to,$cc1,$cc2,$bcc,$subj,$msg);
}
close(TO);
4. 実行
$ perl mail.pl
上記で終了です。 これで今回userlistで指定したアカウントに一通ずつメールを送信することができました。
一コマンドで実行できるので、スクリプトの中で記載したりすることで、アラート通知のように利用することもできます!
5. キーワード
#perl #メール #sendmail #一斉メール #スクリプト #IT #インフラエンジニア
6. お問い合わせ
本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
note.tamolab@gmail.com
いいなと思ったら応援しよう!
