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 によって処理されますが、私はスキップしました。