perl发送邮件注意事项

Posted by 4Aiur on 04/06/2010 in Perl |

perl发送邮件注意事项

1) 程序手工执行可以发送mail,而把程序加入到crontab后无法执行的解决方法在crontab中执行脚本前,加入. /etc/profile;

0 * * * * * . /etc/profile ; /usr/bin/perl /app_path/mail.pl >/dev/null 2>&1

2) smtp服务器需要认证,而Net::SMTP的auth方法不起作用的解决方法Net::SMTP的auth方法依赖Authen::SASL这个模块,
可以用perl -e 'use Authen::SASL'试试,看下是否报错,如果报错的话需要安装Authen::SASL模块。

安装方法:

# perl -MCPAN -e 'install Authen::SASL'

顺便提一下,用抓包工具看的话smtp认证过程账户和密码部分是乱码,其实可以转换出来,乱码的unicode是base64,使用python的decode方法可以转换出明文。

>>> s='string'
>>> s.encode('base64')
'c3RyaW5n\n'
>>> u=u'c3RyaW5n\n'
>>> u.decode('base64')
'string'
>>> 

unicode的问题在RFC 2554中有所描述。
附代码:

#!/usr/bin/perl

use strict;
use warnings;
use Net::SMTP;

my $mailhost='mail.example.com'; #Mail Server .
my $mailfrom='foo@example.com'; #Mail from
my @mailto=('bar@example.com'); #Receive list
my $subject='subject: Topic';

my $text='content';

my $smtp=Net::SMTP->new($mailhost,Timeout=>120,Debug=>1) or die "Error.\n";
$smtp->auth('foo','passwd'); #username and password are needed

foreach my $mailto(@mailto) {
$smtp->mail($mailfrom);
$smtp->to($mailto);

$smtp->data();

$smtp->datasend("To: $mailto\n");
$smtp->datasend("From:$mailfrom\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("\n");

#Message
$smtp->datasend("$text\n\n");

$smtp->dataend();
}
$smtp->quit;

Tags:

Copyright © 2010-2024 4Aiur All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.5, from BuyNowShop.com.