我试图在我的 Asp.Net C# 应用程序中使用端口 465 和主机“smtp.gmail.com”发送电子邮件,但整个应用程序挂起(继续加载)。调试时卡在 SmtpClient.Send(msg)。
无论指定的凭据如何,它都不会抛出任何要捕获的异常或任何超时错误。我必须关闭或刷新页面才能重新访问该页面。
如果我改为使用端口 587,那么一切正常,并且 SmtpClient.Send 响应并发送电子邮件或返回适当的异常,例如操作超时或基于凭据发送电子邮件失败。
我简化了下面的代码进行演示:
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 465,
EnableSsl = true,
Timeout = 200, // or any value it doesn't solve the problem
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("name@gmail.com", "password")
};
var msg = new MailMessage("name@gmail.com", "name@gmail.com", "Any subject", "Any body");
smtp.Send(msg); // stuck here
smtp.Dispose(); // never reached
msg.Dispose();
我尝试了 SendAsync 并减少了超时间隔,但这并没有解决问题。我认为问题在于 smtp.gmail.com 已到达但没有正确响应端口 465,这就是该方法被卡住的原因。
我需要避免这种行为,因为我的应用程序允许动态设置 smtp 服务器详细信息,并且我不希望整个应用程序在输入错误详细信息的情况下挂起。
谢谢,