SMTP验证问题

时间:2010-10-30 20:59:07

标签: perl authentication smtp

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

EHLO example.com
AUTH LOGIN
YWxwaGE=
cGFzc3dvcmQ=
MAIL FROM:<alpha@example.com>
RCPT TO:<beta@betadomain.com>
DATA
Subject: sample message
From: alpha@example.com
To: beta@betadomain.com

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

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

1 个答案:

答案 0 :(得分: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      => 'beta@betadomain.com',
    From    => 'alpha@example.com',
    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 });