【发布时间】:2017-03-30 01:54:47
【问题描述】:
我目前正在尝试使用 Perl 连接到 gmail 收件箱,并且
Net::IMAP::Client
使用以下代码
use strict;
use warnings;
use Net::IMAP::Client;
my $user = '[address]@gmail.com';
my $pwd = '[password]';
my $imap = Net::IMAP::Client->new(
server => 'imap.gmail.com',
user => $user,
pass => $pwd,
ssl => 1, # (use SSL? default no)
ssl_verify_peer => 0, # (use ca to verify server, default yes)
port => 993 # (but defaults are sane)
) or die "Could not connect to IMAP server: $_";
$imap->login or
die('Login failed: ' . $imap->last_error)
但$imap 变量是undef,我收到此错误:
在 testIMAP.pl 第 9 行的连接 (.) 或字符串中使用未初始化的值 $_。
无法连接到 IMAP 服务器:在 testIMAP.pl 第 9 行。
我已使用 Outlook 成功连接到邮箱,但由于没有收到错误消息,我不知道在哪里查看。有谁知道我在这里做错了什么?
【问题讨论】:
-
无论我将什么作为 用户名,我似乎都得到了相同的结果。我相信如果只是错误的细节,它会给我一个“无效的凭据”错误。但是 $imap 对象根本没有被创建(是 undef)。
-
没错,它应该给你一些东西。不知道。我从字面上复制粘贴了您的脚本,仅更改了凭据,并且有效。我将查看模块文档以查找故障排除方法......此外,可能值得检查您的 gmail 设置,关于证书等。 (也许它可能被设置为需要那个或一些额外的东西?)双重验证? (或者不管他们怎么称呼它。)我会先看看 gmail。
-
嗯,是的,你会期待 something 回来。奇怪的是它就这样失败了。 (我用这个模块搜索了“问题”和这样的词,有趣的是我得到什么都没有。看起来不错的模块。)
-
等等...为什么
die中有$_?我没有注意到这一点。你想要$!(或者可能是另一个错误变量)。$_不应在此处设置。$!应该有失败的原因。 -
好的。不一样的球赛。所以......我会首先尝试通过 Perl 获取任何网页,比如
LWP。然后,似乎该模块使用IO::Socket::INET模块来获取连接。 (请参阅其source 子_get_socket。)因此,我将尝试使用该模块的最简单程序,以出去并连接到某个地方。也许首先搜索它的文档(和谷歌,用那个模块?)“网络无法访问”错误。