为什么我不能用c#连续发两封邮件?

我使用smtpClient使用c#发送电子邮件。 我必须每天发送大约100个不同的电子邮件,因为电子邮件根据收件人的不同而不能使用相同的邮件(添加几个收件人)。

我没有使用本地SMTP服务器,我理解(根据这里的 @rizzle响应),有一段时间必须留在一封邮件和另一封邮件之间。 但是,我正在睡觉我的程序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.", 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); } 

如果您使用的是dotnet 4,请在发送最后一条消息后立即执行client.Dispose()这将强制dotnet SMTP内容完成其工作。

请参见此处: System.Net.Mail和MailMessage不立即发送消息

如果您使用的是早期版本的DotNet,请尝试做几件事。

完成消息实例后,执行message.Dispose()

在本地定义您的SmtpClient(在方法中)并在完成发送后退出该方法。 也就是说,不要试图将您的客户端实例作为一个长期存在的类实例中的字段; 在完成之前,它不会刷新您发送到服务器的最后一条消息。

(他们确实在dotnet 4.0中解决了这个问题)

在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类