簡體   English   中英

通過 C# Mailkit / Mimekit 發送電子郵件但出現服務器證書錯誤

[英]Sending email via C# Mailkit / Mimekit but server certificate error comes in

0 Visual Studio 2015 中的代碼

1 我使用 Mailkit 最新版本 (1.18.1.1) 從我自己的電子郵件服務器發送電子郵件。

2 電子郵件服務器有一個自簽名證書,該證書不受信任。

3 我在代碼中添加了以下兩行,以忽略 SERVER CERTIFICATE 錯誤:

client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
client.CheckCertificateRevocation = false;

4 但我的程序仍然崩潰。

5 在電子郵件服務器日志中顯示錯誤:

來自未知 [xxx.xxx.xxx.xxx] 的 SSL_accept 錯誤:對等方重置連接

我猜這是因為服務器證書問題。 因為在 Wireshark 捕獲中,一旦我獲得 SERVER 證書,連接就會終止。

6 我還在我的系統中安裝了電子郵件服務器的 UNTRUSTED 證書,但問題仍然存在。

7 以下是錯誤的詳細截圖在此處輸入圖片說明

8 完整代碼:

使用 (var client = new SmtpClient(new ProtocolLogger("logging.log")))

                    {

                        // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
                        client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
                        client.CheckCertificateRevocation = false;



                        client.Connect("xxx.com", 465, true);
                        // Note: since we don't have an OAuth2 token, disable
                        // the XOAUTH2 authentication mechanism.
                        client.AuthenticationMechanisms.Remove("XOAUTH2");

                        // Note: only needed if the SMTP server requires authentication
                        client.Authenticate("xxx@xxx.com","123456");

                        client.Send(message);
                        client.Disconnect(true);
}

如果您控制連接的兩端,您可能需要先檢查不使用 TLS 的發送,以確保問題僅在使用 TLS 時發生。

還可以嘗試在沒有 wireshark、fiddler 或其他中間人嗅探器/代理的情況下運行,以確保以安全的方式到達服務器沒有問題。 檢查您的防病毒或 Internet 安全系統是否由於不受信任的證書而關閉您的連接。

您可能需要確保的另一件事是您的客戶端和服務器共享相同的協議:我知道舊的 TLS 和 SSL 協議已被棄用,因此客戶端和服務器之間可能沒有通用協議。

您還可以嘗試啟用 system.net 跟蹤(自 .NET 2.0 起可用),看看是否從您獲得的(非常詳細的)日志中獲得了一些更具體的見解: https : //blogs.msdn.microsoft.com/dgorti/2005 /09/18/使用系統網絡跟蹤/

System.Net 跟蹤是 1) 每個進程 2) 顯示線程 3) 適用於 SSL 4) 適用於環回。 5)你不需要重新編譯代碼

[編輯]

您的問題似乎有點過於寬泛,我無法猜測問題,請嘗試縮小問題范圍。例如:

  • 嘗試在沒有 TLS 的情況下連接;
  • 嘗試連接到不同的 SMTP 服務器(使用您知道標准郵件客戶端可以連接的服務器);
  • 嘗試使用不同的客戶端連接到您的服務器(例如使用雷鳥..)
  • 嘗試在同一台機器上運行客戶端和服務器;
  • 在干凈的虛擬機上嘗試相同的操作

順便說一句,SSPI 似乎與受信任的安全問題有關,因此還要仔細檢查您是否已將服務器配置為僅接受受信任的用戶。

[/編輯]

如果這還不夠,我會嘗試更新我的答案 =)

HTH

我的問題解決了。 在 CONNECT 命令和 APP (c#) 開始工作之前,我添加了以下代碼行!!!

client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM