如何从 perl 连接到 gmail?

Posted

技术标签:

【中文标题】如何从 perl 连接到 gmail?【英文标题】:How can I connect to gmail from perl? 【发布时间】:2014-02-26 19:44:59 【问题描述】:

我正在尝试从 gmail 帐户读取邮件,但我看到的示例不起作用。

我是从这个开始的:

use Mail::IMAPClient;
use IO::Socket::SSL;

my $user = 'user\@mydomain.com';
my $pwd = 'password';

my $socket = IO::Socket::SSL->new(
    PeerAddr => 'imap.gmail.com',
    PeerPort => 993,
    SSL_verify_mode => SSL_VERIFY_PEER,
    )
    or die "socket(): $@";

my $client = Mail::IMAPClient->new(
    Socket => $socket,
    User     => $user,
    Password => $pwd,
    )
    or die "new(): $@";

if ( $client->IsAuthenticated() ) 
    print "Auth OK\n";
 else 
    print "No auth\n";

这似乎有效,但从未进行身份验证。根据文档,如果提供了用户名和密码,Mail::IMAPClient->new 应该调用 login。

我试过调用client->login没有区别。

有一些内容相似的问题,但答案表明使用不同的包(Mail::Webmail::Gmail 是其中之一,但它似乎已经过时并且也不起作用)

该帐户是 Google Apps 帐户,而不是普通的 gmail 帐户。我已为该帐户启用 imap 访问权限。

我还尝试使用 Net::IMAP::Client,无论是使用谷歌应用程序帐户还是使用我的 gmail 帐户和应用程序专用密码,都只得到“无效凭据”。

use Net::IMAP::Client;

my $user = 'user\@gmail.com';
my $pwd = ' app 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);

我在尝试连接到 gmail imap 时是否遗漏了什么?

【问题讨论】:

【参考方案1】:

在 Perl 中,单引号内的字符串“\@”字面意思是“\@”。

失去\

【讨论】:

你有多蠢……?没关系,我们都做过一到三遍。

以上是关于如何从 perl 连接到 gmail?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 perl 脚本中使用 UTF8 连接到 MySQL?

创建 perl 脚本以远程连接到另一台服务器并读取文件?

如何检测标准输出是不是连接到 Perl 中的 tty?

如何使用 Perl 通过 TCP 和 UDP 连接到远程机器?

如何从 Perl 调用 Informix 存储过程?

为啥我在通过 IMAP 连接到 Gmail 时收到“需要 Web 登录”消息?