关于监控通讯的建议在ASP.NET中发送成功

时间:2012-07-13 14:50:22

标签: database vb.net loops shared-hosting newsletter

所以,我一直在尝试发送电子邮件简报时遇到各种不同的想法,并且在每一个转折点都遇到了阻塞。

我目前正在使用共享托管环境,并且需要它在此环境中保持稳定。

我本来想创建一个定时的,预定的系统,它将批处理作为后台服务发送,构建我不能用这个环境做到这一点,所以我现在只是使用一个长时间超时的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,希望我可以运行预定的后台服务,但是现在,我需要一个与共享环境相关的解决方法。

1 个答案:

答案 0 :(得分:0)

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

在处理每个记录时,您可能不需要担心更新每个记录的速度,因为发送SMTP消息通常比更新本地数据库慢。如果你的数据库发挥作用的速度很慢,那么你运行它的机器可能对资源(即需要更多ram)的时间过于羞怯,以便新的更快的机器。