2011-11-10 115 views
-1

我使用C#使用SmtpClient發送電子郵件。我必須每天發送大約一百封不同的電子郵件,並且我不能使用相同的郵件(添加多個收件人),因爲電子郵件會根據收件人進行更改。爲什麼我不能用c#連續發送兩封郵件?

我沒有使用本地SMTP服務器,並且我明白(根據@rizzle響應here) 需要在一封郵件和另一封郵件之間留出一些時間。然而,我正在睡眠我的程序10秒,但它仍然只是第一封發送的電子郵件,從來沒有第二個(到目前爲止,我正在嘗試使用兩封電子郵件而不是一百封)。這是我的代碼,有什麼想法?

foreach (Person p in clientList) 
      { 
       AlternateView plainView = AlternateView.CreateAlternateViewFromString("Texto visible para clientes que no tienen HTML", null, "text/plain"); 
       //AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", null, "text/html"); 

       string htmlString = "html string body of the email"; 
       AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlString, null, "text/html"); 

       System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
       message.AlternateViews.Add(htmlView); 
       message.To.Add(p.email.Trim()); 
       message.Subject = p.nombre+", email subject"; 
       message.From = new System.Net.Mail.MailAddress(fromAddress); 
       System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("..."); 
       NetworkCredential myCreds = new NetworkCredential(usr, pass, ""); 
       client.Credentials = myCreds; 
       client.Send(message); 
       System.Threading.Thread.Sleep(10000); 

      } 
+0

多久2可以發送之前你必須睡覺嗎? –

+0

您是否可以包含更多的代碼,例如您正在使用內部發送的循環 - 以及您得到的任何錯誤消息 – Andrew

+0

@Andrew我只包含完整的循環代碼。 – Soph

回答

4

client.Dispose()您發送最後一條信息之後,如果你在DOTNET 4.這將迫使DOTNET SMTP東西完成其工作。

在這裏看到:System.Net.Mail and MailMessage not Sending Messages Immediately

如果你在早期版本的DOTNET的,試着做了幾件事情。

當您完成消息實例時,執行message.Dispose()

定義您的SmtpClient在本地(在一個方法中)並在您完成發送時退出該方法。也就是說,不要試圖將你的客戶端實例作爲一個長久存在的類實例中的一個字段;它將不會刷新您發送給服務器的最後一條消息,直到完成。

(他們真的在DOTNET 4.0解決這個問題)

+0

我在dotnet 3.5上,多謝了 – Soph

+0

我將我的項目重新定向到了dotnet 4並按照你的建議。謝謝! – Soph

2

在3.5嘗試使用:

SmtpClient client = ... 

client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); 

using (MailMessage message = ...) 
{ 
    // where userToken is a user-defined token 
    // to be passed to the SendCompletedCallback 
    client.SendAsync(message, userToken); 
} // Disposes of message 

然後在SendCompletedCallback觸發下...

SmtpClient Class

+0

感謝您的建議,但是我將我的項目定位到dotnet 4,並做了Ollie Jones的建議。不管怎麼說,還是要謝謝你! – Soph

相關問題