通过SMTP限制发送电子邮件

时间:2016-03-24 21:35:17

标签: c# asp.net .net email

我为一个拥有大约100到120名成员的小型组织维护网站。

每个月,我们都会发送一封电子邮件,通知我们的会员我们将在即将举行的会议中讨论的主题。

我正在尝试使用我们的网站向我们提供发送这些电子邮件的方法,但我们的ASP托管网站有定义的限制,每小时50封电子邮件

理论上,我想我可以通过使用 Thread.Sleep(60000)在每次 SmtpClient.Send(MailMessage)调用后让线程休眠1分钟,像这样:

    Category     Value     
       a          0.1        
       b          1          
       c          100        
       d          20         
       a          0.5        

这会导致我们的网站在运行过程中显示已经过了一个多小时,或者可能会失败。

这样做的简单方法是什么?

5 个答案:

答案 0 :(得分:2)

请勿使用您的网络服务器发送电子邮件。

邮件发送API 为您处理。这不是推荐特定产品的地方,所以我不会。

如果您要通过网络服务器发送电子邮件,请不要在网络线程上执行此操作。将您的电子邮件发送状态存储在数据库中,一次发送一个,在单独的线程上执行,或使用单独的应用程序。

答案 1 :(得分:2)

根据您的情况,我建议一些解决方案:
1-例如,安排任务每隔1.2分钟运行一次,此任务将调用电子邮件发送方法,而不需要使用睡眠。
如何在asp.net网站中安排任务的示例:http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx
Best way to run scheduled tasks
 http://hangfire.io/

2-手动或使用代码在Windows任务计划程序中添加新任务(如果您的主机允许此操作),并使此任务调用您网站中发送电子邮件的页面。

3-在一个单独的线程中创建一个单独的应用程序,该线程处理电子邮件发送过程而不会影响您的主要网站性能(这可能是Windows服务,控制台应用程序或普通的Windows应用程序)。

答案 2 :(得分:1)

如果您决定从Web服务器发送电子邮件,则可以使用ASP.NET中的后台任务。 Scott Hanselman did a nice write up about it.。你可以让它一次处理50个然后等待剩下的一小时再继续或者在每封电子邮件之间等待72秒,这样你每小时最多可以发送50个小时。

答案 3 :(得分:0)

我们使用sendgrid为我们的网站发送电子邮件,每月免费限制为12,000 https://sendgrid.com/free可能是一个更容易的选择吗?

答案 4 :(得分:0)

首先创建后台线程并将其置于休眠状态不会以任何方式终止应用程序。它将从线程池中获取线程并将其锁定直到操作完成并将其处理掉。

虽然这可能是高流量应用程序和有限线程池的问题,但必须同时处理多个请求。另一件需要考虑的事情是每次关闭应用程序时,如果运行该任务就会被取消但如果这对您来说不是问题,而您想要一个简单的解决方案,那就是。

我建议您使用外部API让它为您处理。