2011-09-13 27 views
6

Cuando envié un correo usando System.Net.Mail, parece que los mensajes no se envían inmediatamente. Tardan uno o dos minutos antes de llegar a mi bandeja de entrada. Una vez que salgo de la aplicación, todos los mensajes se reciben en segundos. ¿Hay algún tipo de configuración del búfer de mensajes de correo que pueda obligar a SmtpClient a enviar mensajes de forma inmediata?System.Net.Mail y MailMessage no envían mensajes inmediatamente

public static void SendMessage(string smtpServer, string mailFrom, string mailFromDisplayName, string[] mailTo, string[] mailCc, string subject, string body) 
{ 
    try 
    { 
     string to = mailTo != null ? string.Join(",", mailTo) : null; 
     string cc = mailCc != null ? string.Join(",", mailCc) : null; 

     MailMessage mail = new MailMessage(); 
     SmtpClient client = new SmtpClient(smtpServer); 

     mail.From = new MailAddress(mailFrom, mailFromDisplayName); 
     mail.To.Add(to); 

     if (cc != null) 
     { 
      mail.CC.Add(cc); 
     } 

     mail.Subject = subject; 
     mail.Body = body.Replace(Environment.NewLine, "<BR>"); 
     mail.IsBodyHtml = true; 

     client.Send(mail); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Failure sending email.", ex); 
    } 

Gracias,

Marcos

+0

Está utilizando [Enviar] (http://msdn.microsoft.com/en-us/library/swas0fwc.aspx) o [SendAsync] (http://msdn.microsoft.com/en-us/library /x5x13z6h.aspx)? ¿Está enviando directamente a su servidor de correo electrónico o a través de otro servidor SMTP? – Rup

+0

Tenga en cuenta que cuando me envío un mensaje de correo electrónico, aparece casi de inmediato, por lo que no es el servidor smtp. – mservidio

+0

usando Enviar. Acabo de agregar mi método de ayuda ... – mservidio

Respuesta

10

Prueba esto, si estás en Dotnet 4,0

using (SmtpClient client = new SmtpClient(smtpServer)) 
{ 
    MailMessage mail = new MailMessage(); 
    // your code here. 

    client.Send(mail); 
} 

Esto Desechar la instancia client, haciendo que para concluir su sesión SMTP con un elemento de protocolo QUIT.

Si está atascado en una versión anterior de dotnet, intente volver a utilizar la misma instancia de SmtpClient para cada mensaje que envíe su programa.

Por supuesto, tenga en cuenta que el correo electrónico es intrínsecamente un sistema de almacenamiento y reenvío, y no hay nada síncrono (o incluso formalmente predecible) acerca de las demoras desde smtp SEND hasta la recepción.

+0

Brillante! Eso lo hace. Es probable que haya más trabajos diferidos que no se ejecuten inmediatamente a menos que se eliminen como usted menciona. – mservidio

0

Estoy de acuerdo con Ollie. Para responder a su pregunta, No, no creo que haya ninguna configuración de búfer que pueda establecer a través de un formulario.

Lo que es confuso acerca de su pregunta es que usted dice que el mensaje tarda uno o dos minutos en llegar a su bandeja de entrada, pero luego continúa diciendo que al enviarlo a usted, pasan instantáneamente ... Creo que usted quiso decir eso internamente, los mensajes se envían bien y el problema solo ocurre para la dirección externa. En este caso, parece que tal vez su servidor de correo electrónico haga que estos mensajes estén detrás de otros correos electrónicos destinados a direcciones externas (que es actividad normal). Esperar un minuto o dos para recibir un correo electrónico en un sitio externo no es una espera larga.

Sin embargo, esto es poco probable, pero ¿está configurado su servidor de intercambio para analizar los mensajes salientes?

+0

Cuando dije que me enviaba, quise decir que cuando abro un nuevo mensaje en Outlook y me envío un correo electrónico, me llega inmediatamente a mi propia bandeja de entrada.Cuando estaba usando el código anterior para enviarme un correo electrónico (a la misma dirección), el mensaje tardaba uno o dos minutos en aparecer en mi bandeja de entrada. – mservidio

+0

Eso tiene más sentido. No creo que esto sea un problema de escaneo, tal vez la configuración de retransmisión en el servidor de intercambio, entonces? – mutek

+0

Ver los comentarios arriba. @Jason explica el problema con más detalle. – mservidio

Cuestiones relacionadas