Kar*_*ťan 1 c# mailkit .net-core asp.net-core
最近,我在我们的一个旧应用程序中遇到了问题。突然,应用程序停止向其用户发送注册/重置密码电子邮件。经过一些调试,我发现原因是 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);
}
Run Code Online (Sandbox Code Playgroud)
每次在 ConnectAsync() 方法中都会发生错误,但是,它不会抛出任何异常,只是在该方法中冻结一段时间(大约一分钟),然后它只是抛出任务已取消,没有任何 mailkit 特定的信息。
起初,我认为服务器地址、端口或安全选项可能是错误的,但我们在其他一些应用程序中使用相同的设置(和相同的代码!),并且它们似乎工作正常。它也不应该是由我的电脑/网络配置中的某些内容引起的,因为其他开发人员在处理此程序时也会遇到相同的错误。我还尝试对不同的电子邮件使用选项,但错误仍然存在。
知道如何找到此错误的原因,如何在没有抛出异常时调试问题等吗?
根据您的评论,当使用的端口为 465 时,以下行失败:
await smtpClient.ConnectAsync(Options.SmtpServer, Options.Port, MailKit.Security.SecureSocketOptions.None);
Run Code Online (Sandbox Code Playgroud)
那是你的问题。您正在尝试使用端口 465,同时也使用SecureSocketOptions.None.
您需要使用SecureSocketOptions.SslOnConnect端口 465。
端口 465 是 SSL 端口,但您告诉 MailKit 进行连接并将其视为连接到纯文本端口。显然,这是行不通的。
| 归档时间: |
|
| 查看次数: |
2748 次 |
| 最近记录: |