0

所以,我一直在尝试各种不同的想法来尝试发送电子邮件通讯,并且几乎每一次都遇到障碍。

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

我曾想创建一个定时的、计划的系统,将批处理作为后台服务发送,但在这种环境下我无法做到这一点,所以我现在只需将长时间超时的 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,希望我可以在其中运行预定的后台服务,但现在,我需要一个共享环境的解决方法。

4

1 回答 1

0

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

在处理每条记录时,您可能不需要关心更新每条记录的速度,因为发送 SMTP 消息通常比更新本地数据库要慢。如果您的数据库在产生影响的地方那么慢,那么您正在运行它的机器可能资源太少(即需要更多内存)而没有时间换一台更快的新机器。

于 2012-07-13T15:16:29.667 回答