2011-09-13 9 views
6

Quando ho inviato una mail utilizzando System.Net.Mail, sembra che i messaggi non vengano inviati immediatamente. Prendono un minuto o due prima di raggiungere la mia casella di posta. Una volta che ho chiuso l'applicazione, tutti i messaggi vengono ricevuti in pochi secondi. Esiste una sorta di impostazione del buffer dei messaggi di posta elettronica che può forzare SmtpClient a inviare messaggi immediatamente?System.Net.Mail e MailMessage non inviare messaggi immediatamente

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); 
    } 

Grazie,

Mark

+0

Si sta utilizzando [Invia] (http://msdn.microsoft.com/en-us/library/swas0fwc.aspx) o [SendAsync] (http://msdn.microsoft.com/en-us/library /x5x13z6h.aspx)? Stai inviando direttamente al tuo server di posta elettronica o tramite un altro server SMTP? – Rup

+0

Si noti che quando mi mando un messaggio di posta elettronica avviene quasi immediatamente, quindi non è il server smtp. – mservidio

+0

utilizzando Invia. Ho appena aggiunto il mio metodo di supporto ... – mservidio

risposta

10

Prova questo, se siete su Dotnet 4,0

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

    client.Send(mail); 
} 

Ciò Smaltire l'istanza client, inducendolo a spostare in sulla sua sessione SMTP con un elemento di protocollo QUIT.

Se si è bloccati su una versione dotnet precedente, provare a riutilizzare la stessa istanza SmtpClient per ciascun messaggio inviato dal programma.

Ovviamente, tenere presente che l'e-mail è intrinsecamente un sistema store-and-forward, e non c'è nulla di sincrono (o addirittura formalmente prevedibile) sui ritardi da smtp SEND alla ricezione.

+0

Brillante! Questo lo fa Probabilmente c'è un ulteriore lavoro posticipato che non viene eseguito immediatamente a meno che non sia disposto come si menziona. – mservidio

0

Sono d'accordo con Ollie. Per rispondere alla tua domanda, No, non credo ci sia alcuna impostazione del buffer che puoi impostare tramite un modulo.

Ciò che confonde la tua domanda è, dici che il messaggio impiega un minuto o due per raggiungere la tua casella di posta, ma poi continua dicendo che quando si invia a te stesso, passano attraverso immediatamente ... Credo che tu intendessi quello internamente, i messaggi vengono inviati correttamente e il problema si verifica solo per l'indirizzo esterno. In questo caso, sembra che forse il tuo server di posta elettronica potrebbe ingannare questi messaggi dietro ad altre e-mail associate a indirizzi esterni (che è un'attività normale). Attendere un minuto o due per un'e-mail su un sito esterno non è tanto lungo.

Tuttavia, è improbabile, ma il server di Exchange è impostato per eseguire la scansione dei messaggi in uscita?

+0

Quando ho detto di mandarmi, volevo dire che quando apro un nuovo messaggio in Outlook e me lo mando, arriva immediatamente nella mia casella di posta.Quando stavo usando il codice qui sopra per inviarmi una e-mail (allo stesso indirizzo), il messaggio richiedeva un minuto o due prima che comparisse nella mia casella di posta. – mservidio

+0

Questo ha più senso. Non penserei che questo sia un problema di scansione, forse le impostazioni di inoltro sul server di scambio, quindi? – mutek

+0

Vedere i commenti sopra. @ Jason spiega il problema in modo più dettagliato. – mservidio