C# SmtpClient.SendAsync()未接收我发送的所有邮件
我刚刚编写了一些测试代码,查看System.Net.Mail.SmtpClient向我自己发送相同消息的情况C# SmtpClient.SendAsync()未接收我发送的所有邮件,c#,smtpclient,C#,Smtpclient,我刚刚编写了一些测试代码,查看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
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);
}
有什么想法吗?以下是一些可能有帮助的观察结果:
- 仅创建一个SmtpClient
- 改为创建多条消息
- SmtpClient实现IDisposable。用铅笔把它包起来
- MailMessage还实现了IDisposable
- 如果您发送大量电子邮件,SendAsync的性能几乎与Send相同。只需使用Send
- 如果需要并行发送,请使用生产者/消费者模式。一个(或多个)生产线程将内容转储到队列中进行发送,多个消费线程使用一个SmtpClient发送消息。使用BlockingCollection实现此模式非常简单。请参见MSDN中的示例
- 如果使用足够的线程,SMTP服务器将成为瓶颈。当您超载时,请注意
foreach (SmtpClient c in mailClients) {
c.Send(msg);
}