Sto sviluppando un sito Web utilizzando ASP.NET. Lì sto mandando e-mail agli utenti.Come creare un meccanismo di coda di posta elettronica in ASP.NET In caso di interruzione della rete?
Attualmente sto usando questo codice per inviare email in modo asincrono all'utente. Le email stanno inviando in background.
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();
}
Quindi il codice sopra funziona correttamente. Ma un giorno ho avuto un problema. Quando premo il pulsante di invio, allo stesso tempo la mia connessione Internet non funzionava. Quindi l'email non è stata licenziata. Questo è il momento in cui mi rendo conto che questa funzione di posta elettronica ha bisogno di un meccanismo per accodare le e-mail e inviarlo agli utenti uno per uno secondo l'ordine in coda. Quindi, se una e-mail non è stata recapitata o se la rete si interrompe, riprovare. Quindi, come ottenere questo meccanismo?
Quindi stai dicendo che una query di selezione dovrebbe essere eseguita sul DB ogni secondo? Non è un problema di prestazioni? – Banjo
@Sylar, ho detto ogni X secondi, ad es. ogni 30 secondi. E no, non sarebbe un problema di prestazioni. –