Ho bisogno di inviare una serie di e-mail di promemoria, mai più di 100 e-mail per batch, utilizzando SMTP autenticato. Questo sta accadendo su un WindowsService (senza interfaccia grafica).
La libreria SMTP che stiamo utilizzando genera un evento Inviato . Nel listener di eventi Sent, prendiamo alcune informazioni dal args
dell'evento inviato e scriviamo alcuni dati in un database SqlServer tramite la libreria SqlClient, per notare il fatto che la particolare e-mail è stata inviata al destinatario e quando è uscita.
C'è qualche problema o problema per l'eventlistener inviato quando le email vengono inviate su più thread gestiti da ThreadPool?
pseudocodice:
for each record in batch
{
var email = buildEmail(record);
ThreadPool.QueueUserWorkItem( a =>
{
if (!SmtpClient.Connected) SmtpClient.Connect();
if (!SmtpClient.Authenticated) SmtpClient.Authenticate();
if (SmtpClient.Authenticated) SmtpClient.Send(email);
});
}
SmtpClient.Sent += (sender, args) =>
{
//get info from args
// populate SqlCommand parameters
ThreadPool.QueueUserWorkItem(b =>
{
UpdateDatabase(info);
});
};