使用第三方与投递文件夹时 SMTPClient 发送限制为 50 封电子邮件
Posted
技术标签:
【中文标题】使用第三方与投递文件夹时 SMTPClient 发送限制为 50 封电子邮件【英文标题】:SMTPClient sending limit of 50 emails when using third party vs drop folder 【发布时间】:2014-12-21 16:09:36 【问题描述】:我有一个应用程序需要不时发送大量电子邮件。大多数时候,它会发送大约 30 封电子邮件。这没有问题。但有时(每月一次),它需要发送超过 50 个(数百个,而不是数千个)。
使用本地投递文件夹进行测试时,SMTP 客户端工作正常,我可以看到所有电子邮件都放在我的投递文件夹中。
使用 Mandrill(实际的 ESP)进行测试时,MandrillL 似乎只收到 50 封电子邮件。这始终是一致的。
每封要发送的电子邮件都有自己的 SMTPClient 实例。 我已尝试并行和顺序处理电子邮件。两者的行为相同。发送每封电子邮件的代码:
private static void Send(MailMessage mail)
SmtpClient client = new SmtpClient();
client.SendAsync(mail, null);
每封电子邮件都有一个收件人。
ESP (Mandrill) 信誉很高,发送限制为每小时 1453。这几乎没有凹痕。
您能否建议在哪里施加 50 的限制(SMTP 配置、ESP 配置等)以及如何删除(或增加)它?
【问题讨论】:
【参考方案1】:如果所有邮件正文都相同,您只需将所有收件人添加到密件抄送(Blind Carbon Copy - 意味着没有收件人可以看到还有谁收到了邮件)列表并发送邮件一次,然后将其发送给所有 50 多个收件人。
如果它们不相同,只需重复使用相同的连接来发送这 50 多封电子邮件。
问题可能是您的 SMTP 服务器将传入连接限制为每小时 50 个或其他时间窗口以阻止 DDoS。
服务器允许每小时 1453 条消息并不意味着您可以每小时连接 1453 次。
【讨论】:
消息都是不同的,所以需要单独(尽管 Mandrill 确实有模板功能)。您关于连接的答案非常接近。我收到了 Mandrill 支持的回复。他们告诉我他们施加了 50 的活动连接限制。巧合吗?我想不是。我认为您关于重用连接的观点可以解决问题。以上是关于使用第三方与投递文件夹时 SMTPClient 发送限制为 50 封电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用 SmtpClient 和 MailMessage 时如何禁止电子邮件验证
SmtpClient.SendMailAsync 在抛出特定异常时导致死锁
将“SmtpClient.EnableSsl”设置为 true 时,“System.Net.Mail.SmtpClient”需要哪些端口?