【问题标题】:Application Email Architecture应用程序电子邮件架构
【发布时间】:2010-07-22 23:34:13
【问题描述】:

我继承了一个用 c# 编写的 ASP.NET 网站,该网站使用一个 mssql 2k8 数据库,该数据库基于使用数据库邮件的触发器通过触发器插入消息表来发送电子邮件:|任何失败之一和太多的事情回滚,没有记录,也没有发送电子邮件......

真是一团糟。我过去写过一些电子邮件子系统,我想我会在开始重写之前询问输入。在 Microsoft 环境中排队/发送电子邮件的最佳做法是什么?我应该将电子邮件推送到队列,从那里拉、发送、记录吗? DB Email 似乎失败了。队列是否在 SQL Server 中管理? SQL Server 是否调用 C# 应用程序?如果电子邮件发送失败,有什么好的恢复方法?

感谢您的任何见解!

【问题讨论】:

  • 您在这里看到了答案?我没有,既然你问了,我就接受一个。
  • @Hottester 的意思是“一般”。
  • @George Stocker 我不知道我是问“坏问题”还是什么,但我发现我的问题变成了风滚草。我很想有更多的答案。我将努力提出更有针对性和明确的问题。

标签: c# sql-server email architecture


【解决方案1】:

我认为您将系统功能的使用完全分开是正确的:使用 SQL 处理数据,并将电子邮件推送到完全不同的“服务提供商”;我假设你有某种业务逻辑层来协调这个?

我不能从经验中谈论“最佳实践”(专门针对电子邮件),但抽象出电子邮件服务(就像您抽象出数据访问一样)绝对是正确的道路,那就是可能是您现在需要做出的关键决定。然后你可以有不同的电子邮件实现(包括 SQL,如果你真的想的话)。

取决于数量 - 您看的是异步调用还是同步调用? WCF 似乎是处理通信的好选择 - 这将允许您将数据(用于电子邮件)发送到内置队列的端点,或者您可以(通过 WCF)调用同步操作的 Web 服务。

【讨论】:

    【解决方案2】:

    您可以通过 sql-server 发送邮件。更多请参考this

    它的架构是here

    通过 c# 发送邮件的另一种实现是this,因为他们已经开发了一个电子邮件工厂来实现......希望这会有所帮助

    【讨论】:

    • 感谢您的反馈。我知道 db mail,在这种情况下,我觉得它好像失败了。关于以 db mail 为组件的整体流程,您还有其他意见吗?
    • @Ben - 查看数据库邮件的文档,它处理重试等,您可以深入数据库并查看包含数据的表格等。PK :-)
    • 我听说过重试,但我的经验是电子邮件失败 = RAISERROR = 不重试。也许我的失败发生在 db_mail 堆栈中的不同点。
    【解决方案3】:

    sp_send_dbmail 将邮件请求放入 msdb 的队列中。在发送邮件的事务提交后,队列会激活一个处理 SMTP 传递的外部进程,包括重试、日志记录等。整个系统具有很强的弹性、可扩展性和高性能。

    也许您正在使用旧的、已弃用的基于xp_sendmail 的系统?

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 2010-12-20
      • 1970-01-01
      • 2015-02-11
      • 2010-12-02
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多