为什么SmtpClient.非挂

本文关键字:非挂 SmtpClient 为什么 | 更新日期: 2023-09-27 18:01:41

我使用SmtpClient.SendAsync (c#)在ASP中发送电子邮件。. NET web应用程序和服务。web应用程序/服务运行在Windows Server 2012 R2上,使用IIS 8。

有时对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的调用挂起并阻塞调用线程?

为什么SmtpClient.非挂

请查看下面的链接https://msdn.microsoft.com/en-us/library/x5x13z6h (v = vs.110) . aspx可能有两种情况,要么在尝试发送另一个电子邮件消息之前没有等待电子邮件传输完成。或接受者是无效的