2010-04-18 9 views
5

sto usando questo pezzo di codice per inviare una e-mail:L'invio di un sacco di mail utilizzando SmtpClient (C#) prende molto tempo dopo un po '

SmtpClient client = new SmtpClient(); 
client.Host = smtpServer; 
client.Send(mailMessage); 

Se innescare questo codice di dieci volte/secondo, poi dopo un centinaio di mail, l'invio di una mail dura 10 secondi ... Potrebbe esserci una coda qui?

  • Non dovrebbe essere asincrono?
+5

Mi piacerebbe pensare che questo era un disegno CARATTERISTICA! Con ogni probabilità il tuo server di posta ti rallenta per prevenire gli attacchi di spam. – PaulG

risposta

2

Utilizzare SmtpClient.SendAsync anziché SmtpClient.Send.

2

Ci potrebbero essere diverse questioni:

State corretto smaltimento degli oggetti MailMessage? Se si guarda, l'oggetto implementa IDisposable e quindi dovrebbe essere smaltito. (Lo indovinerei a causa dei potenziali allegati). Vorrei iniziare qui.

Hai parlato con l'amministratore del server. Potrebbe esserci una sorta di meccanismo di limitazione che ti rileva l'invio di così tante e-mail in rapida successione.

Se si desidera inviare e-mail in modo asincrono e si preoccupano del risultato del tentativo di invio, assicurarsi di registrarsi per l'evento SendCompleted. Sarà inoltre necessario memorizzare il messaggio stesso o alcune rappresentazioni per sapere quale messaggio è stato completato nell'evento SendCompleted. Tieni presente che l'ordine in cui iniziano le cose potrebbe non corrispondere all'ordine in cui sono completate.

1

Potrebbe essere il server di posta a limitare le tue richieste? Invio la posta utilizzando il server smtp IIS locale e "l'invio" della posta richiede pochissimo tempo per .NET anche se ho migliaia di messaggi inviati in pochi minuti (gestore di eccezioni è andato storto: P), ma possono essere elaborati molto lentamente IIS, e può richiedere ore a volte per essere cancellati nella coda di posta di IIS

Problemi correlati