我正在尝试使用它Email::Send::Gmail
来发送电子邮件,但由于某种原因,我收到一条错误消息,不允许我连接。
代码是标准示例:
#!/usr/bin/perl
use strict;
use warnings;
use Email::Send;
use Email::Send::Gmail;
use Email::Simple::Creator;
my $email = Email::Simple->create(
header => [
From => 'myaddress@gmail.com',
To => 'myaddress@gmail.com',
Subject => 'Server down',
],
body => 'The server is down. Start panicing.',
);
my $sender = Email::Send->new(
{ mailer => 'Gmail',
mailer_args => [
username => 'myaddress@gmail.com',
password => 'XXXX',
]
}
);
eval { $sender->send($email) };
die "Error sending email: $@" if $@;
Run Code Online (Sandbox Code Playgroud)
确切的错误是:
Email::Send::Gmail: error connecting to server smtp.gmail.com
at C:/Perl/site/lib/Email/Send.pm line 256.
Run Code Online (Sandbox Code Playgroud)
我查看了我的 Gmail 帐户,似乎没有任何“允许访问”的内容。我在 Windows7 上并从命令行运行。
有任何想法吗?
谢谢
是时候升级您的依赖项了。
Email::Gmail::Send
取决于Net::SMTP::SSL
哪个取决于IO::Socket::SSL
。解决此类问题的第一步是升级模块依赖项,以防新问题已得到解决。
不幸的是,4天前,当你第一次提出这个问题时,我无法通过IO::Socket::SSL 1.986
on 的测试套件Strawberry Perl 5.18.2
。
t/public_suffix_lib_uri.t ......... ok
failed to connect: An operation was attempted on something that is not a socket. at t/public_suffix_ssl.t line 87.
# Looks like you planned 24 tests but ran 2.
# Looks like your test exited with 10038 just after 2.
Run Code Online (Sandbox Code Playgroud)
幸运的是,此后作者已将该模块更新为IO::Socket::SSL 1.988
,我可以在 Windows 7 和 Linux 上完全安装和使用它。目前它会抛出重新定义的警告 ( cpan ticket 95881
),但升级此依赖项后我能够在 Windows 上发送 Gmail 消息。
注意:您需要application specific password
为此代码创建一个,否则 Gmail 可能会阻止登录并向您发送一封“可疑登录被阻止”的电子邮件。