2016-07-13 120 views
0

我有下面的代碼...錯誤試圖連接到Gmail與MailKit

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.

我最初以爲是有人因爲帳戶有兩步驗證。所以,我建立了另一個帳戶,確保它只使用了常規的身份驗證設置,並且我得到了相同的錯誤。

我發現了一些帖子,在這裏和其他地方,處理這個異常,但他們似乎處理與SmtpClient()工作的問題,在這裏,從代碼中可以看到,我得到了與ImapClient()錯誤。

任何人都可以建議它是什麼,可能是錯誤的原因?它是GMail嗎? MailKit? 。淨?上述所有的?

回答

0

問題是您的系統不接受GMail的SSL證書。您可以覆蓋client.ServerCertificateValidationCallback

一個非常簡單的解決方案的例子可能是這樣的:

client.ServerCertificateValidationCallback =() => true; 

顯然,這意味着,如果有人曾經欺騙imap.gmail.com,你的軟件會被抓到的MITM攻擊,所以這不是理想。

您可能希望將證書的指紋與已知的指紋進行匹配,或者將證書添加到本地證書庫併爲其分配信任級別。