我正在使用SmtpClient.SendAsync
(C#)在ASP.NET Web应用程序和服务中发送电子邮件。 Web应用程序/服务使用IIS 8在Windows Server 2012 R2上运行。
有时候SendAsync
的调用会挂断,并且似乎不会异步发送邮件消息,因此调用线程会阻塞。这种行为似乎是零星的。我无法在测试环境中复制问题。这是因为调用Web方法而发送电子邮件时特别有问题,因为超时是60秒(我正在使用SendAsync
因为这个原因所以客户端不会遇到任何时间延迟)。
这是我的代码段。
SmtpClient client;
MailMessage msg;
public void SendMail()
{
try
{
client = new SmtpClient("smtpAddress@mydomain.com");
msg = new MailMessage();
msg.Subject = "Test";
msg.Body = "This is the body";
msg.From = "noreply@example.com";
msg.To.Add("me@example.com");
client.SendCompleted += new SendCompletedEventHandler(sendCompletedCallback);
client.SendAsync(msg, "Test");
}
catch (Exception ex)
{
// Log error
}
}
private void sendCompletedCallback(object send, AsyncCompletedEventArgs e)
{
if (e.Error != null)
{
// Log error
}
else if (e.Cancelled)
{
// Log cancellation
}
else
{
// Log success
}
client.Dispose();
msg.Dispose();
}
为什么对SendAsync
的调用会挂起并阻塞调用线程?
答案 0 :(得分:1)
请查看以下链接, https://msdn.microsoft.com/en-us/library/x5x13z6h(v=vs.110).aspx 可能有两种情况,要么在尝试发送另一封电子邮件之前没有等待电子邮件传输完成 要么 收件人无效