2009-11-16 65 views
0

我已經寫了一些簡單的代碼,發送自動生成的電子郵件,使用System.mail.Net命名空間。郵件不會發送,直到我終止我的應用程序 - System.Mail.Net

它像一個魅力,但有一個小問題。

郵件不發送,直到我的整個應用程序終止。

你們有沒有解決這個問題的方法?

這裏是我使用的代碼(C#):

try 
     { 
      MailMessage mail = new MailMessage(); 

      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add("[email protected]"); 

      mail.Subject = "Test test"; 
      mail.Body = "blah blah"; 

      mail.Attachments.Add(new Attachment("c:\\file.txt")); 

      SmtpClient smtp = new SmtpClient("myserver.mail.com"); 
      smtp.Send(mail); 
     } 
     catch (SmtpFailedRecipientsException ex) 
     { 
      Console.WriteLine(ex); 
     } 

正如我所說的,一切正常,但郵件沒有發送,直到我終止應用程序。

有什麼辦法強制它發送郵件嗎?

它是一個問題的原因是,我希望郵件在沒有用戶需要重新啓動應用程序的情況下立即發送,但也因爲我想在發送郵件後刪除附件,以及郵件未發送,因此該文件被標記爲「正在使用中」,因此不能被刪除。

問候

/S

回答

1

調用

smtp.Send(mail); 

立即將該郵件發送到您的SMTP服務器。如果在執行該行時沒有看到發送的電子郵件,那麼我會檢查您的smtp服務器是否正常運行。

這裏是關於SmtpClient的more information

1

我有同樣的問題,並利用張貼在http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/6ce868ba-220f-4ff1-b755-ad9eb2e2b13d/解決方法似乎工作:

任何有興趣,我已經找到了解決方案,或者至少一個變通的延遲。

ServicePoint成員包含一個名爲MaxIdleTime的成員。將此值設置爲0似乎與Timeout.Infinite(我假設它也是0)具有相同的效果。將它設置爲1會使我的電子郵件立即發送出去。

請參閱此鏈接:

http://msdn2.microsoft.com/en-us/library/system.net.servicepoint.maxidletime.aspx

示例代碼:

SmtpClient smtp = new SmtpClient(); 

// setup the mail message 

smtp.ServicePoint.MaxIdleTime = 1; 

smtp.Send(myMailMessage); 
+0

我會對此非常小心。請參閱http://stackoverflow.com/questions/930236/net-best-method-to-send-email-system-net-mail-has-issues 瞭解更多信息 – NotMe 2009-11-16 16:00:51

+0

感謝所有回答 - 這似乎工作: d – Sagi1981 2009-11-18 15:38:00

2

我不知道,如果你的應用程序在其上防止郵件組件從做其工作附件鎖直到你的應用程序開始關閉。您能否在發送郵件之前驗證是否清除了所有鎖定?

您可能會從一個只發送電子郵件的新小應用程序開始。一旦它正常工作,添加一個硬編碼的附件。確認它仍在工作。如果一切順利,請添加代碼以瞭解如何處理附件。如果中斷,調整你的代碼。沖洗並重復。;)

0

我以前見過這個問題。我必須關閉Norton Antivirus外發電子郵件掃描功能才能立即收到電子郵件。

HTH

相關問題