tag route page net for asp asp.net email smtp message-queue sendmail

route - ¿Cómo crear un mecanismo de cola de correo electrónico en ASP.NET en caso de que la red se caiga?



select asp-for asp-items (1)

Desactive la cola de correos electrónicos para enviarlos. p.ej:

  1. Cree una tabla de base de datos para correos electrónicos salientes, con una columna para su fecha de envío.
  2. Siempre que desee enviar un correo electrónico saliente, insértelo en la tabla con una fecha NULL enviada.
  3. Haga que una tarea en segundo plano se ejecute cada X segundos para verificar si hay correos electrónicos con una fecha de envío NULO, intente enviarlos y actualice su fecha de envío si tiene éxito. SUGERENCIA: para una forma fácil de poner en cola tareas recurrentes en ASP.NET, eche un vistazo a esto .

Este es un ejemplo muy sencillo, pero puedes expandirlo fácilmente.

Estoy desarrollando un sitio web usando ASP.NET. Ahí estoy enviando correos electrónicos a los usuarios.

Actualmente estoy usando este código para enviar correos electrónicos de manera asincrónica al usuario. Los correos electrónicos están enviando en segundo plano.

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("[email protected]"); 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("[email protected]", "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(); }

Entonces, el código anterior está funcionando bien. Pero un día tuve un problema. Cuando presiono el botón de enviar al mismo tiempo, mi conexión a Internet no funciona. Entonces el correo electrónico no fue despedido. Es el momento en que me doy cuenta de que esta función de correo electrónico necesita algún mecanismo para poner en cola los correos electrónicos y enviarlos a los usuarios uno por uno de acuerdo con el orden en la cola. Entonces, si algún correo electrónico no se entrega o si la red se cae, vuelva a intentarlo. Entonces, ¿cómo lograr este mecanismo?