2010-04-18 11 views
5

estoy usando este pedazo de código para enviar un correo:envío de una gran cantidad de correos que utilizan SmtpClient (C#) realiza muy largo después de un tiempo

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

Si activan este código de diez veces/segundo, a continuación, después de un centenar de correos, enviar un correo demora 10 segundos ... ¿Podría haber una cola involucrada aquí?

  • ¿No debería ser asíncrono?
+5

¡Me encantaría pensar que se trata de una FUNCIÓN DE DISEÑO! Con toda probabilidad, su servidor de correo lo está ralentizando para evitar ataques de spam. – PaulG

Respuesta

2

Use SmtpClient.SendAsync en lugar de SmtpClient.Send.

2

Podría haber varias cuestiones:

¿Está eliminación adecuada de los objetos MailMessage? Si observa, el objeto implementa IDisposable y, por lo tanto, debe desecharse. (Supongo que debido a los posibles archivos adjuntos.) Comenzaría aquí.

Ha hablado con el administrador del servidor. Podría haber algún tipo de mecanismo de aceleración que lo detecte enviando tantos correos en rápida sucesión.

Si desea enviarle correos electrónicos de forma asincrónica y preocuparse por el resultado del intento de envío, asegúrese de registrarse en el evento SendCompleted. También querrá almacenar el mensaje o alguna representación para saber qué mensaje se completó en el evento SendCompleted. Tenga en cuenta que el orden en el que comienzan las cosas puede no ser el orden en el que completan.

1

¿Podría ser el servidor de correo el que estrangula sus solicitudes? Envío correos utilizando el servidor smtp IIS local, y "enviar" el correo lleva muy poco tiempo para .NET incluso cuando tengo miles de mensajes enviados en cuestión de minutos (el manejador de excepciones falló: P), pero pueden ser procesados ​​muy lentamente por IIS, y puede tardar horas en borrarse en la cola de correo de IIS

Cuestiones relacionadas