2010-03-02 37 views
3

我已安装this模块以获取Gmail收件箱中的访问权限和控件。但是,当我尝试通过一个小Perl脚本进行连接并测试功能时,出现此错误消息。如何使用Perl对Gmail进行身份验证?

Error: Could not login with those credentials - could not find final URL 
    Additionally, HTTP error: 200 OK 

这是在Gmail.pm模块内建立的错误。

我可以ping有问题的网址(https://www.google.com/accounts/ServiceLoginBoxAuth),所以我觉得麻烦是找不到网址。此外,我知道凭据是正确的,并在该URL工作,因为我已经手动尝试了它们。

我正在使用this脚本进行测试。我在适当的地方提供了我的凭据。


我也安装了 this模块,它具有相同类型的错误。

任何想法,为什么我被阻止?

+8

这种分布还没有被2006年更新;当时GMail已经发生了很大变化。为什么不使用IMAP? – friedo

+0

没有看到2006年的日期....感谢让我知道....我在哪里可以找到一个IMAP模块?或者我甚至需要一个 – CheeseConQueso

+0

即时通讯不太喜欢访问和解析电子邮件箱,你可能会注意到我的最后一个问题帖子被击落 – CheeseConQueso

回答

12

使用Mail::IMAPClient如下所示。要通过Mail :: IMAPClient获得通过SSL身份验证,您应该从Net :: SSLeay安装IO :: Socket :: SSL。如果是这样,这就像一个魅力。

#!/usr/bin/env perl 
use strict; use warnings; 
use Mail::IMAPClient; 

# Connect to IMAP server 
my $client = Mail::IMAPClient->new(
    Server => 'imap.gmail.com', 
    User  => 'yourusername', 
    Password => 'yourp4a55w0r&', 
    Port  => 993, 
    Ssl  => 1, 
) 
    or die "Cannot connect through IMAPClient: $!"; 

# List folders on remote server (see if all is ok) 
if ($client->IsAuthenticated()) { 
    print "Folders:\n"; 
    print "- ", $_, "\n" for @{ $client->folders() }; 
}; 

# Say so long 
$client->logout(); 
+0

....谢谢....现在浏览模块的方法 – CheeseConQueso

+0

什么是解析消息的方法? – CheeseConQueso

+0

nvm ...我知道了 – CheeseConQueso

2

我成功地访问使用Mail :: POP3Client

+0

谢谢.. ..看起来像它可能正在连接(没有错误信息),但它不会输出任何东西,按照cpan – CheeseConQueso

+0

列出的第一个示例代码,您是否在您的Gmail帐户中启用了POP3访问? PROTIP:如果您不想更改收件箱的状态,请在您的uid中使用'recent'标记:http://mail.google.com/support/bin/answer.py?hl=zh_CN&answer= 47948 – coffeepac

+0

是啊,这是启用 – CheeseConQueso

2

Gmail帐户(Google Apps帐户要准确)如果您无法通过正常POP3或IMAP访问Gmail要么,那么你有一个配置问题,而不是编程问题。

我取我的邮件从Gmail(实际上谷歌Apps,它使用相同的接口),使用此处描述的配置细节:(!这个答案是迄今为止Super User更合适,虽然)http://download.gna.org/hpr/fetchmail/FAQ/gmail-pop-howto.html

0

你可以试着用以下模块

Mail::Webmail::Gmail 
+0

这就是他所做的。但是该模块很可能过时了。 –

0

您可以使用下面的代码也

use warnings; 
use strict; 
use Mail::POP3Client; 
use IO::Socket::SSL; 
use CGI qw(:standard); 
my $cgi = new CGI; 
my $LOG ; 
open $LOG , ">>filename" ; 
my $username = '[email protected]'; 
my $password = '*******' ; 
chomp($password); 
my $mailhost = 'pop.gmail.com'; 
my $port  = '995'; 

$cgi->header(); 

my $pop = new Mail::POP3Client(
USER  => $username, 
PASSWORD => $password, 
HOST  => $mailhost, 
PORT  => $port, 
USESSL => 'true', 
DEBUG  => 0, 
); 
if (($pop->Count()) < 1) { 
exit; 
} 

print $pop->Count() . " messages found!:$!\n"; 

for(my $i = 1; $i <= $pop->Count(); $i++) { 
foreach($pop->Head($i)) { 
/^(From|Subject|Email):\s+/i && print $_, "\n"; 
} 

$pop->BodyToFile($LOG,$i); 

} 

$pop->Close(); 

exit; 
相关问题