我正在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中编码的用户和密码。无论我提交什么服务器总是抱怨用户名或密码是错误的。我做错了什么?
答案 0 :(得分:2)
为什么不安装支持SMTP的SASL模块? Strawberry Perl的一个优点是您可以从CPAN轻松安装模块。
例如,Email::Simple和Email::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 });