Я пытаюсь подключиться к серверу IMAP с помощью OAuth, используя Пример PHP-кода , предоставленный Google, который использует класс Zend Imap, но мне не удается пройти аутентификацию.Zend сообщает мне об ошибке:
Zend_Mail_Storage_Exception [ Error ]: cannot select INBOX, is this a valid transport?
Раздражающе, но это довольно запутанное сообщение об ошибке, которое, по сути, является "Invalid Credentials".Как я это узнал?Отлаживая фактические команды, отправляемые в сокет IMAP, я вижу следующее:
string(44) "NO Invalid credentials ey9if1544983wid.142
"
Я пробовал с telnet и гемом Ruby gmail_xoauth , который предполагает, что это не проблема кода, ночто-то еще.
Глядя на самый базовый уровень всего этого, я получаю такие команды:
TAG1 AUTHENTICATE XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21h......etc
Вот где я получаю NO Invalid credentials
тогда:
TAG2 SELECT "INBOX"
Это возвращает BAD Unknown command
и выгоняет меня.
Я пытался искать людей, имеющих ту же проблему, но я нахожу только вопросы и ответов нет.Есть несколько похожих вопросов StackOverflow:
В одном посте показано, что у кого-то точно такая же проблема в Python.
В этом посте показано, что кто-то пытаетсябыть неловким и делать это с OAuth 2, не сообщая об успехе.
В группе Google GMail есть нить, в которой предлагается исправить ошибку "Invalid Credentials", перейдя в https://accounts.google.com/DisplayUnlockCaptchaдля учетных записей GMail и https://www.google.com/a/[YOURDOMAIN.COM]/UnlockCaptcha, если вы используете Google Apps, но последний только что сказал, что мои имя пользователя и пароль были неправильными, когда они явно не были.Использование этого https://accounts.google.com/DisplayUnlockCaptcha работало нормально - несмотря на то, что моя учетная запись является размещенным приложением, а не просто старым GMail, - однако при попытке войти в систему с помощью примера кода PHP, предоставленного Google, у меня все равно возникают те же ошибки.
Я пробовал использовать разные учетные записи 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 обрабатываются PHP Google в том же файле, но я пропустил его.