2011-09-13 18 views
6

System.Net.Mail kullanarak bir posta gönderdiğimde, mesajların hemen gönderilmiyor gibi görünüyor. Gelen kutuma ulaşmadan önce bir iki dakika sürüyorlar. Uygulamayı bitirdikten sonra, tüm mesajlar saniyeler içinde alınır. SmtpClient'i hemen ileti göndermeye zorlayabilen bir çeşit posta iletisi arabellek ayarı var mı? Eğer Dotnet 4.0 üzerindeSystem.Net.Mail ve MailMessage Hemen Mesaj Gönderme Yok

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

    client.Send(mail); 
} 

iseniz

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

sayesinde

Mark

+0

kullanıyor musunuz? /x5x13z6h.aspx)? Doğrudan e-posta sunucunuza mı yoksa başka bir SMTP sunucusuyla mı gönderiyorsunuz? – Rup

+0

Kendime bir e-posta mesajı gönderdiğimde neredeyse anında geldiğine dikkat edin, bu yüzden smtp sunucusu değil. Gönder kullanarak – mservidio

+0

. Ben sadece yardımcı metodumu ekledim ... – mservidio

cevap

10

onun SMTP oturumu tamamlamayı neden Bu client örneği imha edecek, bu deneyin bir QUIT protokol elemanı ile.

Daha eski bir dotnet sürümünde takılırsanız, programınızın gönderdiği her iletinin aynısını SmtpClient örneğini yeniden kullanmayı deneyin. Tabii ki, e-postanın doğal olarak bir depolama ve iletme sistemi olduğunu ve smtp GÖNDERİM'den almayı resepsiyona ertelemeyle ilgili hiçbir zaman (hatta resmi olarak öngörülebilir) hiçbir şey olmadığını unutmayın.

+0

Parlak! Bu öyle. Muhtemelen bahsettiğiniz şekilde atılmadıkça hemen icra edilmeyen ertelenmiş işler var demektir. – mservidio

0

Ollie katılıyorum. Sorunuzu yanıtlamak için Hayır, bir form aracılığıyla ayarlayabileceğiniz herhangi bir arabellek ayarının olduğuna inanmıyorum.

Sorunuz hakkında kafa karıştırıcı olan şey, mesajın gelen kutunuza ulaşmak için bir veya iki dakika sürdüğünü söylüyorsunuz, ancak sonra kendinize gönderirken, anında geçtiklerini söylemek için devam edersiniz. dahili olarak, mesajlar gönderir ve sorun sadece harici adres için gerçekleşir. Bu durumda, e-posta sunucunuz belki de bu mesajları harici adreslere bağlı diğer e-postaların arkasına koyabilirsiniz (normal etkinlik olan). Harici bir sitede bir e-posta için bir veya iki dakika beklemek, uzun bir bekleyiş değildir.

Ancak, bu olası değildir, ancak Exchange sunucunuz giden iletileri taramak için ayarlanmış mı? [Gönder] (http://msdn.microsoft.com/en-us/library/swas0fwc.aspx) veya [SendAsync] (http://msdn.microsoft.com/en-us/library adresinden

+0

Kendimi yolladığımı söylediğimde, görünüşte yeni bir mesaj açıp kendime e-posta gönderdiğimde, hemen kendi gelen kutuma geliyor.Kendimi e-postayla göndermek için yukarıdaki kodu kullandığımda (aynı adrese), mesaj benim gelen kutuma gelmeden önce bir iki dakika sürüyordu. – mservidio

+0

Bu daha mantıklı. Bunun bir tarama sorunu olduğunu düşünmüyorum, belki de değişim sunucusundaki röle ayarları o zaman? – mutek

+0

Yukarıdaki yorumlara bakın. @Jason konuyu daha ayrıntılı olarak açıklıyor. – mservidio

İlgili konular