2010-02-05 30 views
11

aquí es mi códigosmtpclient "envío de correo fracaso"

for(int i = 0; i < number ; i++) 
{ 
MailAddress to = new MailAddress(iMail.to); 
MailAddress from = new MailAddress(iMail.from, iMail.displayName); 
string body = iMail.body; 
string subject = iMail.sub; 
oMail = new MailMessage(from, to); 
oMail.Subject = subject; 
oMail.Body = body; 
oMail.IsBodyHtml = true; 
oMail.Priority = MailPriority.Normal; 
oMail.Sender = from; 
s = new SmtpClient(smtpServer); 
if (s != null) 
{ 
 s.Send(oMail); 
} 
oMail.Dispose(); 
s = null; 
} 

este bucles envía más de 60.000 de correo electrónico. pero mi problema es que recibo "correo fallido" en algunos correos electrónicos algunas veces 5000 y un tiempo menor que el resto de ellos. y compruebo que todos esos correos electrónicos de error tienen una dirección de correo electrónico válida. no sé cuál es el problema Realmente necesito ayuda en esto.

Editar: Este es mi excepción Traza

Error - Failure sending mail.; Inner Ex - System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed. at System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine) at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine) at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller) at System.Net.Mail.CheckCommand.Send(SmtpConnection conn, String& response) at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from) at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception)

+0

Creo que esto puede ayudar a cualquier persona que tiene un problema similar. http://support.microsoft.com/kb/2183292/en-us – curiousBoy

Respuesta

3

aparentemente este problema se resolvió simplemente al aumentar el tamaño de la cola en mi servidor smtp de terceros. pero la respuesta por Nip suena como que es bastante útil también

1

qué error se puede conseguir es un SmtpFailedRecipientException? de ser así, puede consultar la lista de excepciones internas y ver el Código de estado para obtener más información. el enlace de abajo tiene una buena información

MSDN

Editar para la nueva información

Thisis un problema con la búsqueda de su servidor SMTP de lo que puedo ver, aunque se dice que sólo ocurre en algunos mensajes de correo electrónico. ¿Está utilizando más de un servidor SMTP y, de ser así, tal vez pueda resumir el problema en uno en particular, de lo contrario la velocidad/cantidad de correos electrónicos que está enviando está causando problemas a su servidor smtp.

+0

Gracias Pharabus, he modificado mi pregunta con la excepción trace.it dice "net_io_connectionclosed", ¿qué significa eso? – Nnp

+0

Gracias Pharabus, uso solo un servidor smtp para todos. encontré esto http://forums.asp.net/t/924682.aspx, en la última publicación de este foro alguien dice que use lient.ServicePoint.MaxIdleTime = 1; ¿Tiene sentido? – Nnp

+0

Definitivamente miraría eso, la otra cosa que podría hacer es poner una pausa de un segundo más o menos en el bucle, dependiendo de cómo quiera usar el bucle (obviamente, una pausa de 1 segundo frente a 60,000 bucles agrega una gran demora a esto proceso) – Pharabus

8

Bueno, es de esperar que el "correo electrónico de error de envío" tenga un poco más de detalle. Pero hay algunas cosas que podrían causar esto.

  1. Restricciones en la dirección "De". Si usa direcciones diferentes, su servicio SMTP podría bloquear algunas de ellas para poder enviarlas.
  2. La prevención de inundaciones en su servicio SMTP podría impedir que los correos electrónicos se apaguen.

Independientemente de si se trata de uno de estos u otro error, tendrá que mirar la excepción y la excepción interna para obtener un poco más de detalle.

+0

Gracias Mitchel, uso la misma dirección de correo electrónico "de" para todos, pero la mayoría de ellos fueron entregados. eso significa que la opción (2) se dejó afuera para el control? – Nnp

+0

Sí, es muy posible. Muchos servicios SMTP tienen una configuración X por Y para acelerar. Si captura la excepción completa, incluida la excepción interna, debería poder obtener un poco más de luz sobre la situación. –

+0

Gracias, Mitchel, he modificado mi pregunta con la excepción trace.it dice "net_io_connectionclosed", ¿qué significa eso? – Nnp

2

Tuve el mismo problema al enviar correos electrónicos de gran volumen. Configurando la propiedad deliveryMethod al PickupDirectoryFromIis se arregló para mí. Además, no cree un nuevo SmtpClient siempre.

+0

Gracias Nip, ¿estás usando el servidor smtp local? En mi caso tengo un smtp de terceros (con IP fija), ¿este trabajo de reparación funciona con un servidor de terceros? – Nnp

+0

Bueno, con el conjunto 'PickupDirectoryFromIis', el archivo EML se guarda en el directorio desde el que IIS recoge los correos electrónicos para enviar. Todavía puede probar esto cambiando su configuración smtp local: IIS-> servidor SMTP predeterminado -> propiedades -> entrega -> avanzado y luego puede configurar el host inteligente para que sea su dirección IP de la parte 3d. – Romhein

1

Para nosotros, todo estaba bien, los correos electrónicos son muy pequeños y no se envían muchos de ellos, y este error dio sudently. Parecía que un técnico instaló ASTARO que impedía el envío de correo electrónico. y estábamos recibiendo este error, así que sí, el error es un poco críptico, pero espero que esto pueda ayudar a otros.

1

Al ver su ciclo para enviar correos electrónicos y el error que proporcionó, solo hay una solución.
Declare el objeto de correo fuera del ciclo y asigne fromaddress al bucle que está utilizando para enviar correos. El campo fromaddress se asigna una y otra vez en el ciclo que es su problema.

0

Este error puede aparecer cuando el servidor web no puede acceder al servidor de correo. Asegúrese de que el servidor web pueda llegar al servidor de correo, por ejemplo, haciendo ping.

0

Cinco años más tarde (espero que este promotor no está aún a la espera de una solución a este ..)

que tenían el mismo problema, causado por el mismo error: Estaba declarando la SmtpClient dentro del bucle.

La solución es simple - Que se declare que una vez, fuera del bucle ...

MailAddress mail = null; 
SmtpClient client = new SmtpClient(); 
client.Port = 25; 
client.EnableSsl = false; 
client.DeliveryMethod = SmtpDeliveryMethod.Network; 
client.UseDefaultCredentials = true; 
client.Host = smtpAddress;  // Enter your company's email server here! 

for(int i = 0; i < number ; i++) 
{ 
    mail = new MailMessage(iMail.from, iMail.to); 
    mail.Subject = iMail.sub; 
    mail.Body = iMail.body; 
    mail.IsBodyHtml = true; 
    mail.Priority = MailPriority.Normal; 
    mail.Sender = from; 
    client.Send(mail); 
} 
mail.Dispose(); 
client.Dispose(); 
Cuestiones relacionadas