gpt4 book ai didi

asp.net - 如何在 ASP.NET 中创建电子邮件队列机制以防网络出现故障?

转载 作者:行者123 更新时间:2023-12-01 22:28:04 24 4
gpt4 key购买 nike

我正在使用 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();
}

所以上面的代码工作正常。但有一天我遇到了一个问题。当我同时按下发送按钮时,我的互联网连接中断了。所以电子邮件没有被解雇。这时我意识到这个电子邮件功能需要某种机制来对电子邮件进行排队并按照队列中的顺序将其一封一封地发送给用户。因此,如果有任何电子邮件未送达或网络出现故障,请重试。那么这个机制如何实现呢?

最佳答案

将电子邮件排队与发送分离。例如:

  1. 为外发电子邮件创建一个数据库表,其中有一列表示发送日期。
  2. 每当您想要发送外发电子邮件时,请将其插入表中,发送日期为 NULL。
  3. 每隔 X 秒运行一个后台任务来检查发送日期为 NULL 的电子邮件,尝试发送它们,如果成功则更新其发送日期。提示:有关在 ASP.NET 中对重复任务进行排队的简单方法,请查看 this .

这是一个非常简单的示例,但您可以轻松地对其进行扩展。

关于asp.net - 如何在 ASP.NET 中创建电子邮件队列机制以防网络出现故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com