2007年12月29日星期六

send mail by perl

perl发信的代码
use strict;
no strict 'refs';
use warnings;
use Sql;
use Net::SMTP;
use Net::SMTP_auth;
# Start Send mail
my $Row;
my $MailServer = 'smtp.sample.com';
my $MailAccount= 'username@sample.com';# or 'username'
my $MailPwd = 'userpassword';
my $smtp = Net::SMTP_auth->new($MailServer, Debug => 1) or die('can not connect to smtp server');
$smtp->auth('LOGIN', $MailAccount, 'xiaoyin.yan');
my $MailTo = 'targetuser@smaple.com';
my $MailFrom = 'username@sample.com';
my $MailTitle= 'Notification!';
my $logFile = 'expire2.log';
open(my $log,">>$logFile") or die('Can not open log file!');;

my %DBConnection = (
dbhost=>'192.168.0.1',
dbname=>'dbname',
dbuser=>'dbuser',
dbpass=>'dbpass'
);
my $DB = Sql->new(%DBConnection);
if($DB->{_errstr}) {return("Data base error: " . $DB->{_errstr} . " (". $DB->{_maxtries} . " Attempts)");}
my $query = sprintf("SELECT a.* From dbtable a WHERE ... LIMIT 100;");
$DB->execute($query);
while (my $Row = $DB->read()) {
my $date = gmtime();
my $MailBody = "Subject:$MailTitle.\nto:$MailTo\ncc:thirdemail\@sample.com\n\nDear Sir/Madam #name#,\n\nYour product \"#item_name#\" was expired two weeks ago. Please check. \n\nBest Regards,\nCompany Name\n".$date;
$MailBody =~ s/#name#/$Row->{'name'}/gsi;
$MailBody =~ s/#item_name#/$Row->{'title'}/gsi;

#$MailTo = $Row->{'email'};

print $log "\n********\ngmdate:$date\nUser email:$Row->{'email'}\nUser name:$Row->{'name'}\nTitle:$Row->{'title'}\nEnd date:$Row->{'end_date'}\nMail message:\n$MailBody\n\n";

$smtp->mail($MailFrom);
$smtp->to($MailTo);
$smtp->data();
$smtp->datasend($MailBody);
$smtp->dataend();
}

$smtp->quit;
close($log);
# Net::SMTP_auth模块没有 subject函数, subject需要在mailbody中的头部写入,即
# subject:the subject
# 后面加上一个换行\n
# to, from, cc类似
# 头部用两个换行结束.
# 这样,email客户端就能自动识别这些域.

没有评论: