如何从perl连接到gmail?

chr*_*ris 4 email perl imap

我试图从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";
}
Run Code Online (Sandbox Code Playgroud)

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

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

有几个类似内容的问题,但答案说明使用不同的包(Mail :: Webmail :: Gmail是一个,但它似乎过时,也不起作用)

该帐户是谷歌应用程序帐户,而不是常规的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);
Run Code Online (Sandbox Code Playgroud)

尝试连接到gmail imap时有什么我想念的吗?

mob*_*mob 7

在Perl中,\@单引号内的字符串" "字面意思是" \@".

失去了\.

  • 你有多愚蠢......?没关系,我们都做过一次或三次. (3认同)