IMAP "недопустимые учетные данные" через GMail XOAUTH
Я пытаюсь попасть на сервер IMAP с OAuth, используя пример кода PHP предоставлено Google, который использует класс 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 и Рубин!--14-->gmail_xoauth gem, который предполагает, что это не проблема кода, но что-то еще.
глядя на самый базовый уровень всего этого, я получаю такие команды:
TAG1 AUTHENTICATE XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21h......etc
вот где я получаю NO Invalid credentials
затем:
TAG2 SELECT "INBOX"
возвращает BAD Unknown command
и пинает меня.
Я пробовал искать вокруг людей, имеющих ту же проблему, но я нахожу только вопросы и никаких ответов. Существует несколько подобных StackOverflow вопросы:
один пост показывает, что у кого-то есть точно такая же проблема в Python.
этот пост показывает, что кто-то пытается быть неловким и делать это с OAuth 2, без отчета об успехе.
в группе GMail Google есть поток, который предполагает, что ошибка "недопустимые учетные данные" может быть решена, перейдя в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 в том же файле, но я пропустил его.
3 ответов
У меня была такая же ошибка, и в конце концов я понял, что использую неправильную область при запросе разрешений OAuth.
вы должны иметь...
- scope=https: / / mail.Гугл.com/
- access_type=offline
а также IMAP включен в вашей учетной записи Gmail, очевидно. Теперь все хорошо.
одна из проблем, с которой вы можете столкнуться, заключается в том, что третий параметр Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', true); не должно быть правдой. Это должна быть строка, как "SSL"или " TLS". Я считаю, что вы хотите "SSL", если переходите через порт 993. Это только логическое значение, когда оно ложно.
попробуйте заменить эту первую строку следующим:
$imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', 'SSL');
когда у меня было это же сообщение об ошибке, потому что
$options['consumerSecret'] = $THREE_LEGGED_CONSUMER_SECRET_HMAC;
Я делал это в функции и переменной $THREE_LEGGED... не было в прицеле. Довольно глупо, и я уверен, что вы бы заметили это, но на всякий случай, если кто-то новый читает это.