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... не было в прицеле. Довольно глупо, и я уверен, что вы бы заметили это, но на всякий случай, если кто-то новый читает это.