我正在使用SMTP邮件服务器,该服务器需要用户+ ssl身份验证才能进行连接。我正在寻找连接到邮件服务器和发送电子邮件的perl模块,但没有找到任何有用的东西。
对perl模块或任何perl代码的任何建议都将非常感激。
我尝试使用Mail :: Sendmail和Net :: SMTP :: SSL连接到sendmail服务器并发送邮件。下面是示例代码,但错误用户未知。
错误:
mail: Net::SMTP::SSL=GLOB(0x9599850) not found
RCPT TO: error (550 5.1.1 <user@mail.com>... User unknown).
代码:
#!/usr/bin/perl
use strict;
use warnings;
use Mail::Sendmail;
use Net::SMTP::SSL;
my %mail = (
From=> 'user1@server.com',
To=> 'user2@server.com',
# Cc will appear in the header. (Bcc will not)
Subject => 'Test message',
'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION",
);
$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465, Debug=>1);
$mail{auth} = {user=>'username', password=>"password", required=>1 };
$mail{'X-custom'} = 'My custom additionnal header';
$mail{Message} = "The message key looks terrible, but works.";
# cheat on the date:
$mail{Date} = Mail::Sendmail::time_to_date( time() - 86400 );
if (sendmail %mail) { print "Mail sent OK.\n" }
else { print "Error sending mail: $Mail::Sendmail::error \n" }
print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;
答案 0 :(得分:2)
我假设您验证了此行中的数据:
$mail{auth} = {user=>'username', password=>"password", required=>1 };
是用户'用户名'(在你的reallife代码'user@mail.com'?中),密码'password'在mail.server.com上知道?
如果没有,我会发现User unknown
错误。
<强> EDIT1 强> 我刚刚看到你在那封邮件中没有'To','只有'一个cc,可能你的邮件服务器不喜欢那个(我不介意,所以那么:-),或者是这样'发生'在修剪码?
<强> EDIT2 强> 我能够通过替换
来重现您的错误$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465);
带
$mail{Smtp} = Net::SMTP::SSL->new("smtp.mail.com", Port=> 465);
你需要给mailserer一个有效的地址来发送消息!当我提供一个现有的地址(Cc=>'user2@server.com'
行..它有效!
答案 1 :(得分:0)
也许您可以尝试使用Net :: SMTP :: SSL进行SSL身份验证连接,使用Net :: SMTP :: Multipart进行附件支持并执行某些操作以使它们协同工作。
答案 2 :(得分:0)
您应该使用“SMTP”和“SSL”等字词在search.cpan.org
查找此类内容。第一个匹配是Net::SMTP::SSL
,它将自己描述为标准Net::SMTP
的替代品。这听起来非常相关;它能做你想做的事吗?
答案 3 :(得分:0)
您得到的错误是RCPT TO错误而不是身份验证错误。这可能是因为您实际上尝试将邮件发送给不存在的用户,或者您尝试通过服务器进行中继而不进行身份验证。
如果看起来像Mail :: Sendmail不支持SMTP Auth Method( http://metacpan.org/pod/Mail::Sendmail#LIMITATIONS)所以很可能甚至没有尝试过身份验证。
您应该在创建它的实例后立即使用Net :: SMTP:SSL的auth方法:
$mail{Smtp}->auth('username','password');
答案 4 :(得分:0)
以下是Comcast邮件服务器的一些工作PERL代码。希望你觉得它有用。
#!/usr/bin/perl
use Net::SMTP::SSL;
use MIME::Base64;
$uptime = `uptime`;
$smtp = Net::SMTP::SSL->new
(
"smtp.comcast.net",
Hello => myhost.comcast.net,
Port => 465,
Timeout => 30,
Debug => 0,
);
$smtp->datasend ("AUTH LOGIN\n");
$smtp->response();
# Mailbox info
$smtp->datasend (encode_base64('myuserid')); #username
$smtp->response();
$smtp->datasend (encode_base64('mypassword')); # password
$smtp->response();
# Email from
$smtp->mail ('myuserid@comcast.net');
# Email to
$smtp->to ('anyuser@gmail.com');
$smtp->data();
$smtp->datasend("To: anyuser@gmail.com\n");
$smtp->datasend("From: myuserid\@comcast.net\n");
$smtp->datasend("Subject: My Subject Line");
# Line break to separate headers from body
$smtp->datasend("\n");
$smtp->datasend("Uptime Report - At $uptime\n");
$smtp->dataend();
$smtp->quit();
exit;