用perl发一大堆邮件的一种方法
02-06
帮朋友写的。
本程序从一个文本文件中读取邮件地址和一些需要的记录。
activeperl 5.8 + winxp下通过。
#!/usr/bin/perl
use Net::Smtp;
#邮件发送服务器地址
$smtp_server = 'smtp.126.com';
#发件人地址
$from = '[email protected]';
#邮件标题
$title = '测试邮件一个,接好,别砸到!';
#发一封歇息多久
$delay = 1;
#包含收件人列表及可变信息的文本文件
#格式为:用户名,密码,详细信息
#请把它放在当前目录下,并把它命名为list.txt
$f_list='list.txt';
open(FILE,$f_list) || die "Can not open list file/n";
while(<FILE>){
chomp;
($usr,$passwd,$detail) = split(/,/);
#如果您的列表里直接存储的是email地址,请用如下一句替换上面一句
$to = $usr;
#根据列表文件构建邮件内容。
#因为这里的heredoc要求顶格所以不能正常缩进
$msg=<<HTML;
$detail,您好。
我们的邮件服务器地址已经变为xxxxxxxx.
您的用户名为$usr密码为$passwd
请尽快登陆修改。
由于本次更改给您工作带来的不便在此表示歉意。
谢谢您的支持。
HTML
print "I am sending Email No.".($cnt+=1)." to ".$to."....../n";
&gingerMail($smtp_server,$from,$to,$title,$msg);
print "Email No.".$cnt." has been sent to: ".$to."/n";
sleep($delay);
}
close(FILE);
print "/n......All Finished!!!";
###########################
#
#例程gingerMail
#参数列表
#$smtp_server发邮件smtp服务器地址
#$from发件人地址
#$to收件人地址
#$title邮件标题
#$msg邮件内容
#
###########################
sub gingerMail{
my($smtp_server,$from,$to,$title,$msg) = @_;
$smtp = Net::SMTP->new($smtp_server);
#如果您的服务器需要认证,请在下面输入用户名和密码。
#需要Auth-SASL模块的支持
#windows下可以用ppm安装,unix下请用CPAN安装。
$smtp->auth('sleetdrop','xxxxxxxxx');
$smtp->mail($from);
$smtp->to($to);
$smtp->data();
$smtp->datasend('From: '.$from);
$smtp->datasend("/n");
$smtp->datasend('To: '.$to);
$smtp->datasend("/n");
$smtp->datasend('Subject: '.$title);
$smtp->datasend("/n/n");
$smtp->datasend("$msg/n");
$smtp->dataend();
$smtp->quit;
}
list.txt范例文件
[email protected],1111,臭老九
[email protected],2222,姜源
[email protected],3333,酱小鱼
[email protected],4444,小姜
运行结果
用outlook成功收到