2014-02-26 62 views
4

我正在嘗試從Gmail帳戶讀取郵件,並且我看到的示例無法正常工作。如何從perl連接到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(): [email protected]"; 

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

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

這似乎工作,但從未進行身份驗證。根據文檔,如果提供了用戶名和密碼,Mail :: IMAPClient-> new應該調用登錄名。

我曾嘗試調用客戶端 - >登錄沒有區別。

有類似內容的幾個問題,但答案狀態下使用不同的包(郵件::郵局:: 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); 

試圖連接到Gmail的imap時,有什麼我想念嗎?

回答

7

在Perl中,單引號內的字符串「\@」實際上是「\@」。

失去\

+0

問我現在多麼愚蠢:) – chris

+2

多麼愚蠢的喲......?沒關係,我們都做了一次或三次。 – mob