C# 为什么你要批量发送电子邮件而不是单独发送?

C# 为什么你要批量发送电子邮件而不是单独发送?,c#,email,batch-processing,C#,Email,Batch Processing,我们有Windows服务来检查是否满足某些条件,我们将向客户发送电子邮件。我们每天大约要发送50封电子邮件。我的问题是,是否最好单独发送电子邮件(即每次满足条件时,触发sendmail功能)或将所有电子邮件排队并成批发送?出于性能原因,成批发送是否更好?但我们每天只发送50封电子邮件,所以这并不重要?如果电子邮件应成批发送,您将如何对电子邮件进行排队 非常感谢通常,将多封电子邮件分批发送到一封电子邮件中的原因是为了不激怒收件人,而不是出于性能原因。全天50封电子邮件可能非常烦人,很快会导致收件人

我们有Windows服务来检查是否满足某些条件,我们将向客户发送电子邮件。我们每天大约要发送50封电子邮件。我的问题是,是否最好单独发送电子邮件(即每次满足条件时,触发sendmail功能)或将所有电子邮件排队并成批发送?出于性能原因,成批发送是否更好?但我们每天只发送50封电子邮件,所以这并不重要?如果电子邮件应成批发送,您将如何对电子邮件进行排队


非常感谢

通常,将多封电子邮件分批发送到一封电子邮件中的原因是为了不激怒收件人,而不是出于性能原因。全天50封电子邮件可能非常烦人,很快会导致收件人“退出”,而一封包含所有相关通知的电子邮件可能更容易消化


至于如何对电子邮件重新排队,最好是修改服务本身,将发送的电子邮件存储在一个文件或缓冲区中,并在达到某个阈值(时间阈值或大小阈值)后才发送该文件或缓冲区的内容。

如果您每天只发送50封电子邮件,这一点完全没有意义

就实际服务器而言,SMTP并不关心您是批量发送还是单独发送,它只是通过电子邮件积压队列发送


唯一真正需要关心的是,您是否需要连续查询数据库以获取要发送的电子邮件,或者您是否希望查询数据库以获取要发送的批量电子邮件(以减少数据库查询)

忽略性能,您需要记住另一件事:用户是否需要在满足条件后立即发送电子邮件?如果是这样,不要考虑排队,除非你把队列排空在几乎恒定的基础上。
否则,这真的取决于你。每天50封电子邮件不会破坏你的服务器,所以我不会担心性能问题。另一方面,如果你和你的用户能够方便地成批发送电子邮件,那就去吧

“但我们每天只发送大约50封电子邮件,所以没什么大不了的”-询问并回答。最好将电子邮件发送到您的邮件服务器,让它处理查询细节。@Joel Mueller,目前我们每天大约发送50封电子邮件,但将来可能会增加。:)我理解为总共50封邮件,而不是每个收件人50封。对不起,我应该说得更清楚。这50封电子邮件可能会发送给50个不同的客户。啊。对不起,误会了。在那种情况下,不要理会我的回答。(我将把它留在这里,以免其他人以同样的方式误解这个问题。)Windows服务本身的性能如何?假设我有一个循环来检查条件,如果条件满足,我会发送一封电子邮件。这可以优化吗?谢谢。无论您选择以何种方式实现Windows服务,都可以归结为对
SendMessage
SendToMSPickupDirectory
或其变体的X次调用。但是,您的服务不应该真正检查条件。您的DB查询应该为服务提供一组好的电子邮件来发送,而选择发送内容的是DB查询。典型的