繁体   English   中英

Mailkit.Net 挂在 smtpClient.ConnectAsync() 上,直到任务超时才抛出异常

[英]Mailkit.Net hangs on smtpClient.ConnectAsync(), throws no exception until Task timeout

最近,我在我们的一个旧应用程序中遇到了一个问题。 突然之间,应用程序停止向其用户发送注册/重置密码电子邮件。 经过一些调试,我发现原因是Mailkit SmtpClient 类的一个奇怪的行为。 问题出现在以下代码中:

public async Task Execute(EmailMessage email)
{
    var mimeMessage = CreateMimeMessageFromEmailMessage(email);

    using var smtpClient = new SmtpClient();

    await smtpClient.ConnectAsync(Options.SmtpServer, Options.Port, MailKit.Security.SecureSocketOptions.None);
    await smtpClient.AuthenticateAsync(Options.Username, Options.Password);
    await smtpClient.SendAsync(mimeMessage);
    await smtpClient.DisconnectAsync(true);
}

每次在 ConnectAsync() 方法中都会发生错误,但是,它不会抛出任何异常,只是在此方法中冻结一段时间(大约一分钟),然后它只会抛出 Task cancelled,而没有任何特定于 mailkit 的内容。

起初,我认为服务器地址、端口或安全选项可能是错误的,但我们在其他一些应用程序中使用相同的设置(和相同的代码!),它们似乎工作正常。 它也不应该是由我的 PC/网络配置中的某些内容引起的,因为其他开发人员在处理此程序时也会遇到同样的错误。 我也尝试将选项用于不同的电子邮件,但错误仍然存​​在。

知道如何找到此错误的原因,如何在没有抛出异常时调试问题等吗?

根据您的评论,当使用的端口为 465 时,以下行失败:

await smtpClient.ConnectAsync(Options.SmtpServer, Options.Port, MailKit.Security.SecureSocketOptions.None);

那是你的问题。 您正在尝试使用端口 465,同时使用SecureSocketOptions.None

您需要使用带有端口 465 的SecureSocketOptions.SslOnConnect

端口 465 是 SSL 端口,但您告诉 MailKit 连接并将其视为连接到纯文本端口。 显然,这行不通。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM