0

MailKit で提供されるコード例は、IMAP メールボックスにアクセスするには、次のようなコードが必要であることを示唆しています...

var at = "<<Access_Token>>";
using (var client = new ImapClient())
{
    client.Connect("imap-mail.outlook.com", 993, SecureSocketOptions.SslOnConnect);

    client.Authenticate("<<Email_Address>>", at);

    // do stuff...

    client.Disconnect(true);
}

このコードを GMail と適切に生成された有効期限が切れていないアクセス トークンで使用すると、これはうまく機能します。

適切に生成されたアクセス トークンを使用した同じコードでも、回線AuthenticationException: Invalid username or password.上でスローされるだけです。client.Authenticate

このWeb サイトに対してテストを行ったところ、電子メール アドレスとアクセス トークンの値が有効であることがわかりました。Gmail では正しいのに、ここで間違っていることは何ですか?

[編集]この MSDN ページで、次の提案 を見つけました...

アプリ/サーバーは、AUTHENTICATE コマンドでアクセス トークンを IMAP サービスに渡します。以下を含む base64 でエンコードされた文字列を受け入れます。

  • ユーザー名。
  • ダイレクト OAuth 2.0 リクエストの認証タイプ Bearer。
  • MSA によって付与されたアクセス トークン。

たとえば、アプリ/サーバーは次の文字列を base-64 でエンコードします。

user={user@domain.com}^Aauth=Bearer {Access Token}^A^A

ここで、{user@domain.com} はユーザーのアカウント、{Access Token} は MSA によって付与されたアクセス トークン、^A は Ctrl-A 文字 (U+0001) です。

ただし、提案された文字列を作成し、それを「パスワード」値として渡してclient.Authenticate()無駄にしようとしました。

4

1 に答える 1

0

OAuth2.0 プロセスの一環として、スコープ パラメーターをhttps://technet.microsoft.com/en-ca/dn440163wl.imap,wl.offline_accessに従って指定する必要があります。

wl.emailやなどの他のスコープwl.basicも必要になる可能性がありますが、私が読んだドキュメントの私自身の理解に基づいて、それらは必要ないはずです。

于 2016-08-12T15:24:08.887 に答える