【问题标题】:IMAP "Invalid Credentials" via GMail XOAUTH通过 GMail XOAUTH 的 IMAP “无效凭据”
【发布时间】:2011-12-26 23:11:19
【问题描述】:

我正在尝试使用 OAuth 进入 IMAP 服务器,使用由 Google 提供的 PHP Sample Code,它使用 Zend Imap 类,但我无法进行身份验证。 Zend 给了我错误:

Zend_Mail_Storage_Exception [ Error ]: cannot select INBOX, is this a valid transport?

令人讨厌的是,这是一条相当令人困惑的错误消息,因为它本质上是“无效的凭据”。我怎么知道的?通过调试发送到 IMAP 套接字的实际命令,我看到了这一点:

string(44) "NO Invalid credentials ey9if1544983wid.142
"

我尝试过使用 telnet 和 Ruby gmail_xoauth gem,这表明这不是代码问题,而是其他问题。

看看这一切的最基本层次,我得到这样的命令:

TAG1 AUTHENTICATE XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21h......etc

这就是我得到NO Invalid credentials的地方:

TAG2 SELECT "INBOX"

这会返回 BAD Unknown command 并把我踢出去。

我曾尝试四处寻找有同样问题的人,但我只找到问题而没有答案。有几个类似的 StackOverflow 问题:

One post 表明有人在 Python 中遇到了完全相同的问题。

This post 显示有人试图尴尬并使用 OAuth 2 进行操作,但没有成功报告。

GMail Google Group 上有一个帖子建议“无效凭据”错误可以通过转到 https://accounts.google.com/DisplayUnlockCaptcha(对于 GMail 帐户)和 https://www.google.com/a/[YOURDOMAIN.COM]/UnlockCaptcha(如果您使用的是 Google Apps)来解决,但后者只是说我的用户名和密码显然是错误的。使用这个https://accounts.google.com/DisplayUnlockCaptcha 效果很好 - 即使我的帐户是托管应用程序,而不是普通的旧 GMail - 但是在尝试使用 Google 提供的 PHP 示例代码重新登录时,我仍然遇到相同的错误。

我尝试过使用各种托管的 Google App 帐户和普通的 GMail 帐户。我尝试将 IMAP 服务器从 imap.gmail.com 切换到 imap.googlemail.com,没有任何区别。

      /**
       * Make the IMAP connection and send the auth request
       */
      $imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', true);
      $authenticateParams = array('XOAUTH', $initClientRequestEncoded);
      $imap->requestAndResponse('AUTHENTICATE', $authenticateParams);

      /**
       * Print the INBOX message count and the subject of all messages
       * in the INBOX
       */
      $storage = new Zend_Mail_Storage_Imap($imap);

      echo '<h1>Total messages: ' . $storage->countMessages() . "</h1>\n";

对于那些感兴趣的人,这是建立连接的特定 PHP 代码,所有 XOauth 都由 Google 的 PHP 在同一个文件中处理,但我跳过了它。

【问题讨论】:

  • 根据 Zend 文档,您应该这样做 $imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', 'SSL'); framework.zend.com/apidoc/1.9/Zend_Mail/Protocol/…
  • 谢谢,我盲目地遵循谷歌示例代码,Zend 类文档块同意你的看法。可悲的是,将其更改为“SSL”没有效果,同样的错误。
  • 你有想过这个吗?我被困在同一件事上。按照示例代码进行操作,得到无效凭据错误。似乎找不到任何人修复它。
  • 我从来没有解决过这个问题,因为在发布这个项目几周​​后,这个项目就失败了——这真是让人头疼。

标签: zend-framework authentication gmail imap gmail-imap


【解决方案1】:

您可能遇到的一个问题是 Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', true); 的第三个参数;不应该是真的。它应该是一个字符串,如“SSL”或“TLS”。如果通过端口 993,我相信你想要“SSL”。它只是一个布尔值,当它是 FALSE 时。

尝试将第一行替换为:

$imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', 'SSL');

【讨论】:

  • 嘿乔尔,感谢您的回答,但上面的 cmets 已经提出了这一点,但没有效果。使用"SSL" 超过true 时,我得到完全相同的错误。还有其他想法吗?
【解决方案2】:

当我收到同样的错误信息时,是因为

$options['consumerSecret'] = $THREE_LEGGED_CONSUMER_SECRET_HMAC;

我在函数中执行此操作,变量 $THREE_LEGGED... 不在范围内。非常愚蠢,我相信你会发现这一点,但以防万一有人读到。

【讨论】:

  • 是的,遗憾的是事实并非如此。
【解决方案3】:

我遇到了同样的错误,最终意识到我在请求 OAuth 权限时使用了错误的范围。

你需要...

  • scope=https://mail.google.com/
  • access_type=离线

显然,您的 Gmail 帐户中也启用了 IMAP。现在一切似乎都很好。

【讨论】:

  • 感谢您更新这个老问题的答案。我没有找到任何人真正成功地做到了这一点,所以很高兴知道它是可能的。幸运的是这个项目被放弃了,所以我不再关心了,但下次有用:)
猜你喜欢
  • 1970-01-01
  • 2014-10-15
  • 2012-07-17
  • 2011-07-10
  • 1970-01-01
  • 2011-04-14
  • 2013-06-26
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多