【问题标题】:How do I authenticate into Gmail using Perl?如何使用 Perl 对 Gmail 进行身份验证?
【发布时间】:2011-01-22 18:35:13
【问题描述】:

我已经安装了this 模块来获得对 Gmail 收件箱的访问权和控制权。但是,当我尝试通过一个小的 Perl 脚本连接并测试功能时,我会收到此错误消息。

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

这是在 Gmail.pm 模块中构建的错误。

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

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


我还安装了 this 模块,但出现相同类型的错误。

知道为什么我会被阻止吗?

【问题讨论】:

  • 该发行版自 2006 年以来未更新;在那段时间里,GMail 发生了很大的变化。为什么不只使用 IMAP?
  • 没有看到 2006 年的日期....感谢您告诉我....在哪里可以找到 IMAP 模块?或者我什至需要一个
  • 我不太喜欢访问和解析邮箱,你可能会注意到我上一个被击落的问题帖子
  • Net::IMAP::Client 看起来很完整,但我没有亲自使用过。 search.cpan.org/~mishoo/Net-IMAP-Client-0.93/lib/Net/IMAP/…
  • 也无法使用该连接 - “无法连接到 IMAP 服务器”

标签: perl module gmail login-script authentication


【解决方案1】:

使用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();

【讨论】:

  • 解析消息的方法是什么?
  • @Krebs 为什么我更喜欢显示 $EVAL_ERROR ($@) 而不是 $ERRNO ($!),它作为字符串打印,会产生最后一个系统或库调用的错误字符串。如果要评估的字符串未编译(即发现语法错误),则设置 $@。
  • @i-blis "你应该从 Net::SSLeay 安装 IO::Socket::SSL" 意味着安装 Net::SSLeay 会引入 IO::Socket::SSL 但反过来为真(意味着 IO::Socket:SSL 依赖于 Net::SSLeay),如 deps.cpantesters.org/depended-on-by.pl?module=Net%3A%3ASSLeay 所示
  • 谢谢,这对我也有用(新手注意:sudo cpan Mail::IMAPClient)
【解决方案2】:

我正在使用 Mail::POP3Client 成功访问 gmail 帐户(准确地说是 Google 应用帐户)

【讨论】:

  • thanks.... 看起来它可能正在连接(没有错误消息),但它没有按照 cpan 列出的第一个示例代码输出任何内容
  • 您是否在您的 gmail 帐户中启用了 POP3 访问?提示:如果您不想更改收件箱的状态,请在您的 uid 中使用“最近”标签:mail.google.com/support/bin/answer.py?hl=en&answer=47948
  • 连接后有没有检查return $pop->Count()? -1 表示错误,否则你在忙
【解决方案3】:

如果您也无法通过普通的 POP3 或 IMAP 访问 gmail,那么您的问题是配置问题而不是编程问题。

我使用此处描述的配置详细信息从 gmail(实际上是 Google Apps,它使用相同的界面)获取我的邮件:http://download.gna.org/hpr/fetchmail/FAQ/gmail-pop-howto.html

(不过,这个答案更适合Super User!)

【讨论】:

    【解决方案4】:

    你可以试试下面的模块

      Mail::Webmail::Gmail
    

    【讨论】:

    • 这就是他所做的。但该模块很可能已经过时了。
    【解决方案5】:

    你也可以使用下面的代码

    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  = 'name@gmail.com';
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2015-12-10
      • 2011-06-30
      • 2020-06-24
      • 2020-12-22
      • 2017-11-24
      • 1970-01-01
      相关资源
      最近更新 更多