1

我们有兴趣在我们的 ASP.NET Web 应用程序中实现一些东西,它将向从 SQL Server 2008 中提取的地址发送一封电子邮件。

这似乎不会那么困难。伪代码:

EmailAddressList addresses = EmailAddressManager.GetList();

foreach (EmailAddress x in addresses)
{
    MailMessage msg = new MailMessage("fromaddress@test.com", x.ToAddress);
    //prepare msg, body, subject, etc.

    SmtpClient smtp = new SmtpClient();
    smtp.Send(msg);

    //add artificial delay for throttling?  this seems to be a common tactic
}

这个问题有一个赞成的评论,链接到本应有帮助的内容,但现在只会导致“找不到页面”错误。

这个问题中,OP明确表示上述伪代码方法不是“好方法”。但它有什么问题呢?对此有共同的或更好的做法吗?是否有我没有考虑到的隐藏陷阱?

还有一点关于我们的情况的详细信息:这可能每月只使用两次,一次发送的电子邮件数量不会超过大约 30 或 40。最终目标是,我们去这个页面有了这个工具,我们可以预览将要发送的内容和发送给谁,然后我们只需按下一个按钮,它就会执行上面的伪代码。

4

1 回答 1

0

我不认为像您正在做的循环有什么问题,但是您可能需要处理一些事情。最重要的可能是错误处理。如果其中一封电子邮件失败,您只会将电子邮件发送给一部分人,如果您需要发送给其他人,这将很难处理。即使您有一些简单的 try-catch,重试这些电子邮件仍然会遇到问题。您将需要某种方式来存储您计划发送到的所有电子邮件以及每次发送的结果。

接下来是与性能相关的。如果有很多电子邮件,使用 .Send() 一次发送一封电子邮件会很慢。一个简单的解决方法是使用任务库或异步版本来多线程发送。当然这会使状态管理稍微复杂一些,但是会显着提高邮件发送速度。如果您对每分钟/小时可以发送的电子邮件数量有限制,那么这可能与此优化不一致,也可能不一致。

如果每个收件人都有不同的内容,您可能需要使用一些模板库,例如 NVelocity 或 MS Razor 引擎。

或者您可以将这些无聊的东西外包给 SendGrid 之类的地方。

于 2012-10-17T01:57:21.237 回答