zend-framework - IMAP "Invalid Credentials"通过 GMail XOAUTH

标签 zend-framework authentication gmail imap gmail-imap

我正在尝试使用 OAuth 进入 IMAP 服务器,使用 PHP Sample Code由使用 Zend Imap 类的 Google 提供,但我无法进行身份验证。 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 在同一文件中处理,但我跳过了它。

最佳答案

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

你需要有...

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

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

    关于zend-framework - IMAP "Invalid Credentials"通过 GMail XOAUTH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093465/

    相关文章:

    php - 在 symfony 中丢失经过身份验证的 token

    google-apps-script - 使用 Google 应用脚本创建草稿邮件

    mysql - Zend DB - 刷新临时表

    zend-framework - Zend 框架 1.8+ : How to automatically set the application environment?

    php - 如何使用带标记的 Zend_Cache_Backend_TwoLevels?

    php - 在 Magento 中为 links.phtml 列表的 UL 添加一个类

    asp.net - 解决SQL注入(inject)问题

    authentication - Mojolicious 基本登录

    laravel-4 - 通过Laravel发送邮件时,Gmail锁定帐户

    html - Gmail 不允许 margin 属性(property)