我刚刚编写了一些测试代码,查看System.Net.Mail.SmtpClient向我发送相同的消息。
int numClients = 10;
List<SmtpClient> mailClients = new List<SmtpClient>();
for (int i = 0; i < numClients; i++) {
mailClients.Add(new SmtpClient(smtpHost));
}
MailMessage msg = new MailMessage("myAddress@eg.com", "myAddress@eg.com", "test message", "" );
foreach (SmtpClient c in mailClients) {
c.SendAsync(msg, null);
}
这一切都很好并且执行没有任何问题,只是我只收到'n - 1'消息。 即如果我发送10条消息,我只收到收件箱中的9条消息。如果我发送50我只收到49等。
注意:如果我更改代码以使用阻止发送,那么我将始终收到正确数量的消息。 e.g。
foreach (SmtpClient c in mailClients) {
c.Send(msg);
}
有什么想法吗?
答案 0 :(得分:3)
以下是一些可能有所帮助的观察结果:
我怀疑您可能遇到多个SmtpClient实例的错误/问题,这些实例都包装了相同的SMTP服务器。使用单个实例可以解决问题。
<强>更新强>
每个MSDN:
调用SendAsync后,您必须等待电子邮件传输完成,然后再尝试使用Send或SendAsync发送其他电子邮件。
http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx
因此,根据您的情况,使用SendAsync over Send几乎没有任何好处。你的循环可能正在踩东西,因为你不等待以前的SendAsync完成。
以下是一些想法: