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
这是我得到“无效凭据”错误提示的地方:
TAG2 SELECT "INBOX"
当我执行这个命令时,它返回BAD Unknown command
并将我踢出。
我尝试搜索解决此问题的人,但只找到了问题,没有答案。有一些类似的StackOverflow问题:
一个帖子显示了一个人在Python中遇到完全相同的问题。
这篇文章显示了有人试图使用OAuth 2进行操作,并且没有成功报告。
GMail Google Group上有一个线程建议通过访问https://accounts.google.com/DisplayUnlockCaptcha来解决“无效凭据”错误,如果您正在使用Google Apps,则可以访问https://www.google.com/a/[YOURDOMAIN.COM]/UnlockCaptcha,但后者会提示我的用户名和密码错误,而它们显然不是。使用https://accounts.google.com/DisplayUnlockCaptcha完全正常 - 即使我的帐户是托管的应用程序,而不是普通的GMail - 但是当我尝试使用Google提供的PHP示例代码重新登录时,仍然会收到相同的错误。
我已经尝试过各种托管的Google应用程序帐户和普通的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在同一文件中处理的,但我跳过了它。
$imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', 'SSL');
。 http://framework.zend.com/apidoc/1.9/Zend_Mail/Protocol/Zend_Mail_Protocol_Imap.html#__construct - WildlyInaccurate