来自.Net的异步电子邮件

时间:2010-09-28 15:30:00

标签: c# .net asynchronous smtpclient

我正在尝试发送电子邮件异步,因此它不会减慢我的前端(Asp.Net MVC)。

SmtpClient smtp = new SmtpClient(_mailServer, 25);
smtp.UseDefaultCredentials = true;
MailMessage message = new MailMessage();

// ...etc

smtp.SendA(message); // this works fine

smtp.SendAsync(message, null); // if i change it to this, it doesn't work (mail never appears)

我并没有真正理解SendAsync的第二个参数是什么。

MSDN说它的是一个传递给操作完成时调用的方法的对象

好吧,wtf?什么方法?所以我只是尝试传递null,因为我不太明白这是为了什么,但显然有些不对。

3 个答案:

答案 0 :(得分:2)

本质上,它是您希望在发送完成事件中传递的对象。

使用SendAsync时,会发生事件SendCompleted。然后,您处理该事件,以便您知道可以发送另一封电子邮件。主要原因是您一次只能发送一封电子邮件。

答案 1 :(得分:0)

您是否为SendCompleted事件设置了事件处理程序?在SmtpClient.SendAsync的MSDN示例中,userState只是一个字符串,但它们具有分配给SendCompleted事件的回调函数。这可能就是这里缺少的东西。

答案 2 :(得分:0)

在发送电子邮件之前,您的应用程序很可能已经结束。第二个参数传递给on complete事件处理程序。

查看MSDN中的示例并单独尝试。

http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx