如何连接到Gmail收件箱

Gni*_*ots 4 perl gmail imap

我目前正在尝试使用Perl和Net::IMAP::Client 以下代码连接到Gmail收件箱

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)
Run Code Online (Sandbox Code Playgroud)

但是$imap变量是,undef并且我收到此错误:

在串联(。)或testIMAP.pl第9行的字符串中使用未初始化的值$ _。
无法连接到IMAP服务器:在testIMAP.pl第9行。

我已经使用Outlook成功连接到邮箱,但是由于没有收到错误消息,所以我不确定该在哪里查看。有人知道我在做什么错吗?

Gni*_*ots 5

非常感谢zdim帮助您进行故障排除。

首先,zdim指出我的错误变量不正确。$ _应该是$!

这显示了错误消息“网络不可达”,但是我能够成功地将telnet和telnet连接到“ imap.gmail.com”。

解决方案在 Perl IO :: Socket :: SSL:connect:网络不可达处找到

将Net :: IMAP :: Client模块中的use语句更改为以下工作方式:

use IO::Socket::SSL 'inet4';
Run Code Online (Sandbox Code Playgroud)

此后,建立连接,但是登录将失败并显示

Login failed: [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)
Run Code Online (Sandbox Code Playgroud)

这是由于Gmail的安全功能。我收到一封电子邮件,使我可以确认该连接不是恶意的,然后后续登录成功。

对于其他人,最后一个可能有一些解决方案。如果激活了两步身份验证,则可能需要发出“应用程序密码”,或者可能需要启用“允许安全性较低的应用程序”