2012-07-13 49 views
0

因此,我一直在讨论各种不同的想法,试图发送电子邮件新闻稿,并且几乎在每一个回合都遇到阻塞。关于监控的建议通讯在ASP.NET中发送成功

我现在使用共享主机环境,并且需要它在此环境中保持稳定。

我想创建一个定时的计划系统,将批处理作为后台服务发送,但是我无法在此环境中执行此操作,所以我现在只需将一个长超时的AJAX帖子转换为.NET表单功能。

我有发送电子邮件,一个共同的功能,和我通过我的数据库循环这样做如下

For Each email In list 
    If Common.isValidEmail(email("email")) Then 
     Try 
      Common.sendEmail(email("email"), Common.tCase(email("email")), content, subject, "true", "newsletter", "customer") 
     Catch ex As Exception 
      errorList += email("id") & "," 
     End Try 
    Else 
     Common.changeData("DELETE FROM mailingList WHERE id='" & email("id") & "'") 
    End If 
Next 

我在这里赶上两个潜在的错误情况下,isValidEmail功能检查,如果电子邮件是正确的,并然后我尝试发送一封邮件,如果失败了,我就会建立一个错误列表。

但是,如果服务中断,这是不好的。

因此,我正在考虑通过为每个电子邮件地址的数据库行添加一个“发送”标志来修改它,但是这需要为每个循环写入数据库,这是否会拼命减慢速度?

然后任何时候它退出,我可以回到数据库并重新发送给未被标记的用户。

有没有人有更好的想法?我希望这是一个后台服务,并且正在考虑将其迁移到Azure,希望我可以运行预定的后台服务,但现在,我需要一个解决方案来共享环境。

回答

0

是的,您将通过向数据库记录添加一个状态来大幅提高解决方案的可靠性,这可以告诉您单个记录是否已作为该批次的一部分进行处理。这样,您可以设置一个过程,每隔一段时间调用一次您的函数,并且每次调用只发送X个消息。因此,如果您的主机正在限制每小时发送多少封电子邮件,您现在可以通过调整每次通话中发送的邮件数量以及执行功能的频率来轻松控制该邮件。

在处理它时,您可能不需要担心更新每条记录的速度,因为发送SMTP邮件通常比更新本地数据库要慢。如果你的数据库在速度上有所改变,那么你运行它的机器可能对资源(即需要更多内存)太害羞了,而不是新机器的更快时间。

+0

对......好吧,在这种情况下......这里就是了! – 2012-07-13 15:37:46