发送电子邮件异步方法

时间:2015-09-04 20:42:16

标签: c# asynchronous smtp

我需要能够异步拨打所有电子邮件。我们如何做到这样的事情。所以我们假设我有一个方法A

public void A() {
    SendEmail();
}

public void SendEmail() { }

如何使这个SendEmail()方法异步?我们只是做一些像

这样的事情
public async void SendEmail() { }

感谢。

3 个答案:

答案 0 :(得分:0)

建议返回Task,所以我会返回它而不是返回void:

async Task SendEmail()
{
    //Do Something
}

首选任务,因为您希望为您的呼叫者(可能是您自己)提供等待发送电子邮件之类的任务。

此外,任务还可以继续:

await SendEmail().ContinueWith(SendNotification);

答案 1 :(得分:0)

创建异步包装器

public Task void SendEmailAsyn() { 
    return Task.Factory.StartNew(() => { SendEmail(); });
}

答案 2 :(得分:0)

有一种更简单的方法来执行异步电子邮件,并且管理它的工具内置于操作系统中。我提供了一个类似的答案来回答一个稍微不同的问题:https://stackoverflow.com/a/30768906/964043

基本上,您可以使用 System.Net.Mail.SmtpClient 快速排队通过将 DeliveryMethod 设置为假脱机文件夹中写入磁盘的电子邮件的 PickupDirectoryFromIis 即可。在运行的服务器上,您只需在同一台计算机上设置和配置 Microsoft SMTP服务,即可指向有效的SMTP服务器,该服务器将为您转发消息。这意味着您已经拥有一个完全线程化和高性能的方法,可以异步发送电子邮件,而无需自己编写任何代码。非常适合从Web应用程序,Web服务或任何其他基于服务器的应用程序发送消息。