我正在尝试发送电子邮件异步,因此它不会减慢我的前端(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,因为我不太明白这是为了什么,但显然有些不对。答案 0 :(得分:2)
本质上,它是您希望在发送完成事件中传递的对象。
使用SendAsync时,会发生事件SendCompleted。然后,您处理该事件,以便您知道可以发送另一封电子邮件。主要原因是您一次只能发送一封电子邮件。
答案 1 :(得分:0)
您是否为SendCompleted事件设置了事件处理程序?在SmtpClient.SendAsync的MSDN示例中,userState只是一个字符串,但它们具有分配给SendCompleted事件的回调函数。这可能就是这里缺少的东西。
答案 2 :(得分:0)
在发送电子邮件之前,您的应用程序很可能已经结束。第二个参数传递给on complete事件处理程序。
查看MSDN中的示例并单独尝试。