【问题标题】:I'm getting a MailKit.Security.SslHandshakeException when trying to connect to "smtp.office365.com"尝试连接到“smtp.office365.com”时收到 MailKit.Security.SslHandshakeException
【发布时间】:2019-08-12 17:36:17
【问题描述】:

我正在尝试使用 MailKit 通过“smtp.office365.com”发送电子邮件。这是我正在使用的代码。

using (var client = new SmtpClient(new ProtocolLogger("smtp.log")))
{
    client.ServerCertificateValidationCallback = (s, c, h, e) => true;
    client.Connect("smtp.office365.com", 587, SecureSocketOptions.SslOnConnect);
    client.Authenticate(new SaslMechanismNtlmIntegrated());
    Debug.WriteLine(client.IsAuthenticated);
    client.Send(message);
    client.Disconnect(true);
}

我从 GitHub 上的 this comment 获得的 SaslMechanismNtlmIntegrated 类。

每当我运行这段代码时,我都会收到一个SslHandshakeException

以下是异常的详细信息:

MailKit.Security.SslHandshakeException
  HResult=0x80131500
  Message=An error occurred while attempting to establish an SSL or TLS connection.

One possibility is that you are trying to connect to a port which does not support SSL/TLS.

The other possibility is that the SSL certificate presented by the server is not trusted by the system for one or more of the following reasons:
1. The server is using a self-signed certificate which cannot be verified.
2. The local system is missing a Root or Intermediate certificate needed to verify the server's certificate.
3. The certificate presented by the server is expired or invalid.

See https://github.com/jstedfast/MailKit/blob/master/FAQ.md#InvalidSslCertificate for possible solutions.
  Source=MailKit
  StackTrace:
   at MailKit.Net.Smtp.SmtpClient.<ConnectAsync>d__70.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MailKit.Net.Smtp.SmtpClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)
   at QuoteAndOrder.SpecialsQuoteWindow.BtnEmail_Click(Object sender, RoutedEventArgs e) in SpecialsQuoteWindow.xaml.cs:line 501

Inner Exception 1:
IOException: The handshake failed due to an unexpected packet format.

我去了详细信息中提到的FAQ,但给出的解决方法并没有解决问题。

【问题讨论】:

  • 尝试使用SecureSocketOptions.StartTls 而不是SecureSocketOptions.SslOnConnect
  • 我更新了常见问题解答以解释不同类型的 SSL 连接,因为人们一直对使用哪些选项以及何时使用感到困惑。
  • 对于在使用面向 .NET Core 2.0 的旧版应用程序时遇到此异常的任何其他人,您可以通过在 .NET Core 2.2.0 或更高版本上运行应用程序来解决问题(例如,通过运行 @ 987654329@).

标签: c# email ssl mailkit


【解决方案1】:

willaien 提到的解决方案解决了这个问题。即,使用SecureSocketOptions.StartTls 而不是SecureSocketOptions.SslOnConnect

【讨论】:

  • 这解决了我的问题。我不得不使用端口 587 而不是 25 。
  • 这给了我另一个异常:MailKit.Net.Imap.ImapProtocolException: 'IMAP 服务器已意外断开连接。'
猜你喜欢
  • 2017-10-02
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多