在asp.net发送时事通讯约10000封电子邮件

在asp.net发送时事通讯约10000封电子邮件

问题描述:

我必须编写应用程序发送通讯。 什么是发送电子报用户的最佳方式? 我的要求是在asp.net发送时事通讯约10000封电子邮件

  1. 每封邮件是seprately如要:
  2. 每个邮件具有独特的退订链接

是很好用的SMTP邮件类.NET的? 我看起来可能会有问题,但不能决定我应该去哪个地方? 有各自之间的许多建议

  1. 多线程Windows服务
  2. 使用邮件服务器
  3. 添加了Thread.Sleep(2000)发送。

任何人都可以提出很好的方法来诠释这个吗?

我不会推荐asp.net网页发送,即使您是在单独的后台线程中启动它。我认为你会冒着服务器在发送过程中回收你的过程的风险,这会弄乱它。你真的需要编写某种单独的服务或应用程序来发送你的电子邮件。

最简单的选择只是创建一个快速和肮脏的控制台或Windows窗体应用程序。

另外日志记录就像其他海报所说的那样至关重要。如果失败,你想确切地知道发送的内容和停止的地方,这样当你重新启动它时,你不会再邮寄所有那些再次工作的人。你希望能够输入发送的起始点,所以如果你需要在#5000号邮箱重新启动,你可以。

System.Net.Mail命名空间中的类可以很好地发送邮件。

最大的问题之一将是找到一个电子邮件主机,它可以让你发送这么多的电子邮件。大多数电子邮件主机具有节流功能,并且有时它会根据服务器条件而变化,所以如果服务器被大量使用,那么电子邮件限制将会受到更多限制,并且您每小时只能设置500封电子邮件。

我们有一份新闻稿,作为单独的电子邮件发送给大约20000人,我们不得不玩弄电子邮件之间的延迟,直到找到可用于我们电子邮件主持人的邮件为止。我们在电子邮件之间以1.2秒结束,所以这可能是一个很好的起点。

我认为电子邮件主机专门用于批量邮件,所以如果你得到其中一个可能不是问题。

另外,如果您主持自己的电子邮件,这可能不成问题。而且,如果您主持自己的邮件,则可以选择将邮件放在提货目录中,然后您可以尽快将其全部转储到那里,然后让电子邮件服务按照自己的步调进行提取。

编辑:这里是设置添加到配置文件设置拾取目录

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="SpecifiedPickupDirectory" > 
      <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

hi cris, 感谢您的回答。 我们有我们自己的兑换服务器。 我想知道如何删除皮卡目录中的邮件? – 2010-06-29 09:02:20

+0

在配置文件的mailsettings元素中,您可以更改传送方法。你也可以通过编程来完成。 http://msdn.microsoft.com/en-us/library/ms164240.aspx – 2010-06-29 13:20:49

+0

谢谢克里尔 我会给它尝试 – 2010-06-29 15:41:52

我写过发送电子邮件的页面,但几乎不会达到您的音量。不过,我会建议基于代码我已经在过去执行以下操作:

  • 使用Web应用程序写出来的邮件,所有的收件人地址到数据库表(或多个)。

  • 有一个超出ASP.NET实际发送电子邮件的进程。这可能是一个作为计划任务设置的vbs文件,或者(最好)是一个windows服务。该过程将采用电子邮件的文本,附加取消订阅链接,并且一旦发送成功,标记发送的数据库记录。这样,如果发送失败,它可以稍后再试一次(发送过程在标记为未发送的所有记录上循环)。

  • 如果您需要发送内容和时间的日志,您只需将发送的记录保留在数据库表中。否则,只需删除一次发送成功的记录。

恕我直言,ASP.NET工作进程中发送电子邮件是一个坏主意,因为你不知道需要多长时间,如果发送失败几乎没有机会的页面超时前重试。

绝对不要在ASP.NET做到这一点。这是新Web开发人员犯下的最大错误之一。

这需要是一个Windows应用程序或服务,可以处理这么多的量。

创建一个网页来“设计”新闻简报。当他们点击发送时,将新闻简报放在某个地方(数据库)并使用另一个程序(Windows服务等)发送排队的信件。如果设计正确,这将更加有效并且具有潜在的容错能力。

我已经在ASPNET MVC 2实体框架和使用System.Net.Mail命名空间中编写了一个时事通讯模块(作为更大系统的一部分)。它在视图中被启动,实际上只是在控制器中运行,并有一个支持方法来执行发送。每发送一封电子邮件,我都会跟踪是否存在困难(引发异常),并更新该数据库记录,指出异常失败,否则我会更新记录,说明成功。我们也做个性化,所以我们有'标签'被数据库中的额外字段取代(存储为XML以提高灵活性)。这有助于处理取消订阅功能。我的代码非常简单(请不要让我用异常处理作为业务逻辑;),它就像一个魅力。

这是所有在VPS上完成的http://maximumasp.com,其中还承载4个网站与相当不错的流量。我们使用他们的SMTP服务器。我们通知他们我们需要这项服务,并且在关系方面没有任何问题。

我们在运行Windows 2008的机器上安装了2GB的RAM,并且每秒处理6封电子邮件。当网站需要它时,我们将它撞到了3GB,现在邮寄出去的速度大约是20邮件/秒。我们的邮寄地址范围从2,000到100,000个电子邮件地址。

简而言之,ASP.NET可以用来处理邮件输出,并且如果你添加了一些逻辑来处理记录更新,那么中间发送失败的担心就会减轻。是的,可能有更多的方法来做到这一点。我们正在寻找MQMS和线程,并将其与windows服务分开,以使它更稳定和可扩展,因为我们放置了更多的客户端和更大的列表,但现在它工作得很好,具有合理的报告和错误处理。

+0

仅供参考我们把RAM再次提高到4GB(得爱虚拟环境),现在正在泵出35emails /秒。它变成一个非常稳定的设置。您可以浏览该页面,稍后再回来查看报告。我们已经在一些简单的电子邮件通知中添加了某些百分比的发送已完成。我们有计划添加更复杂的排队,但它正在处理负载,没有任何打嗝。不要害怕使用.NET Web服务器来管理大量邮件! – 2010-11-03 04:22:51