我有一个按钮,当用户点击它时,会发送一封电子邮件。我希望这个过程能够立即返回并在后台发送电子邮件,而不会因为处理电子邮件而占用UI。我搜索了async
/await
/等方法,并找到了很多不同的解决方案 - 我正在寻找一个简单的解决方案。我的电子邮件代码:
public void SendEmail(string toAddress, string subject, string body, string code = null) {
try {
var fromAddressObj = new MailAddress("noreply@me.com", "Name");
var toAddressObj = new MailAddress(toAddress, toAddress);
const string fromPassword = "Password";
var smtp = new SmtpClient {
Host = "smtp.office365.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddressObj.Address, fromPassword)
};
using (var message = new MailMessage(fromAddressObj, toAddressObj) {
Subject = subject,
IsBodyHtml = true
}) {
message.Body = body;
smtp.Send(message);
}
} catch (Exception e) {
Elmah.ErrorSignal.FromCurrentContext().Raise(e);
}
}
如何修改代码以避免阻塞调用者?
SmtpClient.SendMailAsync
不支持。您可以参考这里的SendMailExImplAsync
。 - noseratio - open to work