0

私は次のコードを持っています...

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
{
    ClientId = "<< MY CLIENT ID>>",
    ClientSecret = "<<MY CLIENT SECRET>>"
},
                new[] { "https://www.googleapis.com/auth/gmail.readonly" },
                "<<EMAIL ADDRESS>>",
                CancellationToken.None,
                new FileDataStore("Mail2.Auth.Store")).Result;

using (var client = new ImapClient())
{
    // THE CODE FAILS ON THIS NEXT LINE
    client.Connect("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
    client.Authenticate("<<EMAIL ADDRESS>>", credential.Token.AccessToken);
}

実行すると、コードは指定されたように失敗しますAuthenticationException: The remote certificate is invalid according to the validation procedure.

最初は、アカウントで 2 段階認証がオンになっているのではないかと考えていました。そのため、通常の認証設定を使用するように別のアカウントを設定しましたが、同じエラーが発生しました。

ここや他の場所で、この例外に対処する多くの投稿を見つけましたがSmtpClient()、コードからわかるように、およびここでの作業の問題に対処しているようですImapClient()

エラーの原因が何であるかを誰かが示唆できますか? Gメールですか?メールキット? 。ネット?上記のすべて?

4

1 に答える 1

1

問題は、システムが GMail の SSL 証明書を受け入れないことです。

オーバーライドできますclient.ServerCertificateValidationCallback

ソリューションの非常に単純な例は、次のようになります。

client.ServerCertificateValidationCallback = () => true;

明らかに、これは誰かが imap.gmail.com を偽装した場合、ソフトウェアが MITM 攻撃に巻き込まれることを意味するため、理想的ではありません。

証明書の拇印を既知の拇印と照合するか、証明書をローカルの証明書ストアに追加して信頼レベルを割り当てます。

于 2016-07-14T13:52:28.740 に答える