通过GMail XOAUTH IMAP"无效凭据"

Phi*_*eon 6 authentication gmail imap zend-framework gmail-imap

我正在尝试使用OA提供的使用Zend Imap类的PHP示例代码进入带有OAuth的IMAP服务器,但我无法进行身份验证.Zend给了我错误:

Zend_Mail_Storage_Exception [ Error ]: cannot select INBOX, is this a valid transport?
Run Code Online (Sandbox Code Playgroud)

令人讨厌的是,这是一个相当混乱的错误消息,基本上是"无效的凭据".我怎么知道的?通过调试发送到IMAP套接字的实际命令,我看到:

string(44) "NO Invalid credentials ey9if1544983wid.142
"
Run Code Online (Sandbox Code Playgroud)

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

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

TAG1 AUTHENTICATE XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21h......etc
Run Code Online (Sandbox Code Playgroud)

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

TAG2 SELECT "INBOX"
Run Code Online (Sandbox Code Playgroud)

这会回来BAD Unknown command并踢我.

我一直试图寻找有同样问题的人,但我发现只有问题,没有答案.有一些类似StackOverflow的问题:

一篇帖子显示有人在Python中遇到完全相同的问题.

这篇文章显示有人试图尴尬并用OAuth 2做,没有成功的报告.

还有就是建议"无效凭证"的错误可以通过将要解决的Gmail谷歌集团线程https://accounts.google.com/DisplayUnlockCaptcha对于Gmail帐户和https://www.google.com/a/ [YOURDOMAIN.COM]/UnlockCaptcha如果您使用的是Google Apps,但后者只是说我的用户名和密码错误,当他们显然没有.使用此https://accounts.google.com/DisplayUnlockCaptcha工作正常 - 即使我的帐户是托管应用程序,而不是普通的旧GMail - 但是当我尝试使用由提供的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";
Run Code Online (Sandbox Code Playgroud)

对于那些有兴趣的人来说,这是设置连接的特定PHP代码,所有XOauth都由Google的PHP在同一个文件中处理,但我跳过它.

rod*_*aph 4

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

你需要有...

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

显然,您的 Gmail 帐户中还启用了 IMAP。现在看来一切都很好。