应用电子邮件架构

问题描述:

我继承了一个ASP.NET网站使用利用数据库邮件通过发送触发基于插入电子邮件到消息表中的MSSQL数据库2K8用C#编写:|其中发生任何故障的东西太多了回滚,不会被记录,并没有发送电子邮件......应用电子邮件架构

什么乱七八糟的。我过去写过几个电子邮件子系统,我想在这里开始重写之前我会要求输入。在Microsoft环境中排队/发送电子邮件的最佳做法是什么?我应该把邮件推送到队列中,从那里拉,发送,登录? DB电子邮件似乎是一个失败。在SQL服务器中管理队列吗? SQL Server调用C#应用程序吗?如果电子邮件发送失败,什么是恢复的好方法?

感谢您的任何见解!

+0

你在这里看到一个答案?我不知道,我会接受你的问题。 – 2010-03-09 16:51:06

+0

@Hottester意思是“一般”。 – 2010-07-22 15:45:23

+0

@George Stocker我不知道我是否只问过“坏问题”或什么,但我发现我的问题变成了滚滚草。我很想有更多的答案。我将努力探索更多重点明确的问题。 – 2010-08-19 14:56:18

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

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

根据卷 - 你看看异步调用或同步调用? WCF似乎是处理通信的好候选者 - 这将允许您将数据(用于电子邮件)发送到内置队列的终点,或者可以(通过WCF)调用同步执行的Web服务。

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

它的架构是here

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

+0

感谢您的反馈意见。我知道数据库邮件,在这种情况下,我觉得它是一个失败。就以db邮件作为组件的整个过程而言,您是否有任何其他输入? – 2010-02-20 05:27:41

+0

@Ben - 检查数据库邮件的文档,它处理重试等,你可以挖掘到数据库,并与数据等看到表。 PK :-) – 2010-02-20 05:28:07

+0

我听说你有关重试,但我的经验有被电子邮件失败= RAISERROR =没有重试。也许我的失败发生在db_mail堆栈的不同位置。 – 2010-02-24 01:26:08

sp_send_dbmail地方邮件请求到msdb中的队列。在发送邮件提交的事务之后,队列激活一个处理SMTP传递的外部进程,包括重试,日志记录和所有这些。整个系统非常有弹性,可扩展和高性能。

也许你正在使用的旧的,过时xp_sendmail的系统?