2010-10-30 297 views
0

我正在用Perl编写一个简单的邮件客户端,它使用SMTP登录邮件服务器,并从那里发送邮件到另一个电子邮件地址(在不同的主机上)。我使用原始的SMTP命令,因为草莓perl没有附带SASL.pm,这是验证所需的。但是,当脚本尝试自我验证时,它会失败。我尝试了'AUTH LOGIN'和'AUTH PLAIN'机制,但没有运气。下面是一个例子:SMTP身份验证问题

EHLO example.com 
AUTH LOGIN 
YWxwaGE= 
cGFzc3dvcmQ= 
MAIL FROM:<[email protected]> 
RCPT TO:<[email protected]> 
DATA 
Subject: sample message 
From: [email protected] 
To: [email protected] 

Greetings, 
Typed message (content) 
Goodbye. 
. 
QUIT 
EOT 

“YWxwaGE =”, “cGFzc3dvcmQ =” 是在Base64编码的用户和口令。无论我提交服务器,总会抱怨用户名或密码错误。我做错了什么?

回答

2

为什么不直接安装一个支持SMTP和SASL的模块? Strawberry Perl的一个优点是你可以很容易地从CPAN安装模块。

例如,Email::SimpleEmail::Sender

use strict; 
use warnings; 
use Email::Sender::Simple qw(sendmail); 
use Email::Simple; 
use Email::Simple::Creator; 
use Email::Sender::Transport::SMTP; 

my $email = Email::Simple->create(
    header => [ 
    To  => '[email protected]', 
    From => '[email protected]', 
    Subject => "sample message", 
    ], 
    body => "Greetings,\nTyped message (content)\nGoodbye.\n", 
); 

my $transport = Email::Sender::Transport::SMTP->new({ 
    host => 'smtp.example.com', 
    sasl_username => 'foo', 
    sasl_password => 'bar', 
}); 

sendmail($email, { transport => $transport }); 
+0

我想你的代码 - 仍然没有运气。 – 2010-10-31 10:07:19

+0

没关系,我解决了这个问题:) – 2010-10-31 11:16:02