我该如何使用Perl连接Gmail?

4

我正在尝试从一个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应调用登录操作。

我尝试过调用client->login,但没有任何区别。

有一些类似的问题,但答案中指出要使用不同的包(例如Mail::Webmail::Gmail),但它似乎已经过时且也不起作用。

该帐户是Google Apps帐户,而不是常规的Gmail帐户。我已启用该帐户的imap访问。

我还尝试了使用Net::IMAP::Client,不论是使用Google Apps帐户还是使用我的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个回答

7
在Perl中,单引号内的字符串"\@"实际上就是"\@"。去掉"\"即可。

3
你有多蠢?算了,我们都犯过这种错误一两次。 - mob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接