我正在使用ASP.NET开发一个网站。我在那里向用户发送电子邮件。
目前我正在使用此代码向用户异步发送电子邮件。电子邮件正在后台发送。
public static void SendEmail(string Path, string EmailTo)
{
Thread emailThread = new Thread(delegate()
{
try
{
string body = string.Empty;
using (StreamReader reader = new StreamReader(Path))
{
body = reader.ReadToEnd();
}
MailMessage mail = new MailMessage();
mail.From = new MailAddress("test@test.com");
mail.To.Add(EmailTo);
mail.Subject = "Test email";
mail.Body += body;
mail.IsBodyHtml = true;
SmtpClient smtpClient = new SmtpClient("smtp.test.com");
smtpClient.Port = 587;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("test@test.com", "test");
smtpClient.EnableSsl = true;
smtpClient.SendCompleted += (s, e) =>
{
smtpClient.Dispose();
mail.Dispose();
};
try
{
smtpClient.Send(mail);
}
catch (Exception ex) { /* exception handling code here */ }
}
catch (Exception)
{
throw;
}
});
emailThread.IsBackground = true;
emailThread.Start();
}
所以上面的代码工作正常。但有一天我遇到了问题。当我同时按下发送按钮时,我的互联网连接断开了。所以电子邮件没有被解雇。那时我意识到这个电子邮件功能需要一些机制来排队电子邮件并根据队列中的顺序逐个发送给用户。因此,如果任何电子邮件未送达或网络停止,则重试它。那么如何实现这种机制呢?
答案 0 :(得分:5)
将电子邮件排队发送去除。 e.g:
这是一个非常剥离的简单示例,但您可以轻松扩展它。