我正在尝试将带有Net :: SMTP :: SSL模块的经过身份验证的电子邮件发送到comcast电子邮件服务器。我正在使用以下代码。
#!/usr/bin/perl
use Net::SMTP::SSL;
use MIME::Base64;
$smtp = Net::SMTP::SSL->new
(
"smtp.comcast.net",
Hello => "host.comcast.net",
Port => 465,
Timeout => 30,
Debug => 1,
);
$smtp->datasend("AUTH LOGIN\n");
$smtp->response();
# Mailbox info
$smtp->datasend(encode_base64('username')); # username
$smtp->response();
$smtp->datasend(encode_base64('password')); # password
$smtp->response();
# Email from
$smtp->mail('user\@comcast.net');
# Email to
$smtp->to('user\@host.com');
$smtp->data();
$smtp->datasend("To: user\@host.com\n");
$smtp->datasend("From: user\@comcast.net\n");
$smtp->datasend("Subject: Test");
# Line break to separate headers from body
$smtp->datasend("\n");
$smtp->datasend("Blah\n");
$smtp->dataend();
$smtp->quit();
exit;
我基本上是关注来自here的代码来进行comcast。
我已经运行了telnet并且可以连接到端口上的smtp服务器,我可以发出AUTH LOGIN并成功登录,但是发出了
$smtp->datasend("AUTH LOGIN\n");
始终会导致:
Can't call method "datasend" on an undefined value
我也尝试过执行auth方法登录,但也失败了。
我在这里缺少什么?我知道这很简单,我忽视了。
答案 0 :(得分:0)
几乎所有Net::SMTP
方法都可以选择设置错误代码,所以我怀疑Net::SMTP::SSL
做同样的事情。请尝试以下构造函数:
use Net::SMTP::SSL;
use MIME::Base64;
use strict;
use warnings;
my $smtp = Net::SMTP::SSL->new(
"smtp.comcast.net",
Hello => "host.comcast.net",
Port => 465,
Timeout => 30,
Debug => 1,
) or die "Failed to connect to mail server: $!";
另外,你的smtp服务器与你的Hello不同的事实对我来说有点怀疑。
答案 1 :(得分:0)
对于使用STARTTLS的电子邮件服务,最好使用较新的NET :: SMTPS模块。请尝试以下代码:
my $msg = MIME::Lite ->new (
From => 'from@bellsouth.net',
To => 'to@bellsouth.net',
Subject => 'Test Message',
Data => 'This is a test',
Type => 'text/html'
);
my $USERNAME = 'from@bellsouth.net';
my $PASSWORD = 'abc123';
my $smtps = Net::SMTPS->new("smtp.mail.att.net", Port => 587, doSSL => 'starttls', SSL_version=>'TLSv1');
$smtps->auth ( $USERNAME, $PASSWORD ) or die("Could not authenticate with bellsouth.\n");
$smtps ->mail('from@bellsouth.net');
$smtps->to('to@bellsouth.net');
$smtps->data();
$smtps->datasend( $msg->as_string() );
$smtps->dataend();
$smtps->quit;
最初来自http://www.skipser.com/p/2/p/send-email-using-perl-via-live.com.html
答案 2 :(得分:-1)
试试这个:
<强> 更改 强>
没有$smtp->mail('user\@comcast.net');
的 $smtp->mail('user@comcast.net');
到'\'
<强> 更改 强>
没有$smtp->to('user\@host.com');
的 $smtp->to('user@host.com');
到'\'