6

Google が提供する Zend Imap クラスを使用するPHP サンプル コードを使用して、OAuth で IMAP サーバーにアクセスしようとしていますが、認証に失敗しています。Zendは私にエラーを与えています:

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

これは私が得る場所ですNO Invalid credentials

TAG2 SELECT "INBOX"

これは戻っBAD Unknown commandてきて、私を追い出します。

同じ問題を抱えている人を探してみましたが、質問しかなく、答えが見つかりません。同様の StackOverflow の質問がいくつかあります。

ある投稿は、誰かが Python でまったく同じ問題を抱えていることを示しています。

この投稿は、誰かがぎこちなく、OAuth 2 でそれを実行しようとしていることを示していますが、成功したという報告はありません。

GMail Google グループには、 GMail アカウントの場合は https://accounts.google.com/DisplayUnlockCaptcha およびhttps://www.google.com/a/アクセスすることで「無効な認証情報」エラーを解決できることを示唆するスレッドがあります。 [YOURDOMAIN.COM]/UnlockCaptcha Google Apps を使用している場合、後者は明らかに間違っていないのに、私のユーザー名とパスワードが間違っていると言っただけです。このhttps://accounts.google.com/DisplayUnlockCaptchaを使用しても問題なく動作しました - 私のアカウントはホストされたアプリであり、単純な古い GMail ではありません - しかし、提供された 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 によって処理されますが、私はスキップしました。

4

3 に答える 3

4

これとまったく同じエラーが発生し、OAuth アクセス許可を要求するときに間違ったスコープを使用していることに最終的に気付きました。

あなたが持っている必要があります...

  • scope=https://mail.google.com/
  • access_type=オフライン

また、明らかにGmailアカウントでIMAPが有効になっています。今はすべて良さそうです。

于 2012-10-12T07:55:27.540 に答える
1

問題の1つは、Zend_Mail_Protocol_Imap('imap.googlemail.com'、 '993'、true);の3番目のパラメーターです。真実であってはなりません。「SSL」または「TLS」のいずれかの文字列である必要があります。ポート993を経由する場合は、「SSL」が必要だと思います。FALSEの場合はブール値にすぎません。

その最初の行を次のように置き換えてみてください。

$imap = new Zend_Mail_Protocol_Imap('imap.googlemail.com', '993', 'SSL');
于 2011-11-11T18:05:53.837 に答える
1

この同じエラーメッセージが表示されたとき、それは

$options['consumerSecret'] = $THREE_LEGGED_CONSUMER_SECRET_HMAC;

関数と変数 $THREE_LEGGED でそれを行っていました...スコープ内にありませんでした。かなりばかげており、あなたはそれを見つけたと確信していますが、新しい誰かがそれを読んでいる場合に備えて.

于 2012-02-09T16:33:58.870 に答える