2

我编写了一个 perl 脚本来使用 gmail 的 smtp 服务器发送电子邮件:smtp.gmail.com -

use Net::SMTP;

my $smtp = Net::SMTP->new('smtp.gmail.com',
                    Port=> 587,
                    Timeout => 20,
                    Hello=>'user@gmail.com'
                    );
print $smtp->domain,"\n";
$sender = "user@gmail.com";
$password = "mypassword";
$smtp->auth ( $sender, $password ) or die "could not authenticate\n";
$receiver = "user@gmail.com";

$subject = "my custom subject";
$smtp->mail($sender);
$smtp->to($receiver);
$smtp->data();
$smtp->datasend("To: <$reciever> \n");
$smtp->datasend("From: <$sender> \n");
$smtp->datasend("Content-Type: text/html \n");
$smtp->datasend("Subject: $subject");
$smtp->datasend("\n");
$smtp->datasend('the body of the email');
$smtp->dataend();
$smtp->quit();
print "done\n\n";

对于“用户”,我有我的 gmail 用户名,对于“我的密码”,我有密码。但是,当我运行此代码时,它会在身份验证本身停止,给出:无法进行身份验证。

我能够连接到 google 的 smtp 服务器,因为我得到:'mx.google.com',结果是:
print $smtp->domain,"\n";

我做错了什么?请帮忙。

4

2 回答 2

3
use Net::SMTP;
my $smtp = Net::SMTP->new ....

afaik,您需要使用加密连接通过 gmail 发送,使用Net::SMTP::TLSNet::SMTP::SSL(使用端口 465)

Hello=>'user@gmail.com'

“你好”不是电子邮件地址,而是将您的主机名放在那里

$sender = "user@gmail.com";
...
$receiver = "user@gmail.com";

把这些放在单引号中

如果您仍然收到“无法验证”。确保已安装模块MIME::Base64Authen::SASL

 $smtp->datasend("To: <$reciever> \n");

应该是$receiver,而不是$reciever

于 2012-06-13T07:27:36.123 回答
0

Gmail在端口 587 上使用 TLS/STARTTLS,在端口 465 上使用 SSL。请遵循从 Perl 通过 Google SMTP 发送电子邮件。或者,您可以使用Email::Send::SMTP::Gmail。我推荐这个,因为它更容易使用并且有更多的功能。

于 2012-06-13T08:04:01.823 回答