2

我正在尝试异步发送电子邮件,这样它就不会减慢我的前端(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 因为我真的不明白这是为了什么,但显然有问题。

4

3 回答 3

2

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

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

于 2010-09-28T15:40:11.940 回答
0

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

于 2010-09-28T15:48:08.817 回答
0

您的申请很可能在电子邮件发送之前就结束了。第二个参数传递给 on complete 事件处理程序。

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

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

于 2010-09-28T15:54:56.063 回答