5

我有几个 Web 应用程序,它们都使用发送电子邮件,无论是通过联系表格还是某种通知更新等。

我发现的问题是实际上没有任何方法可以跟踪从 Web 应用程序发送的电子邮件,所以我想出了一个可能的解决方案:

图1。 邮件发送服务流程图

这真的很简单——我不想让每个 Web 应用程序自己发送电子邮件,而是想通过创建一个中央电子邮件发件人服务来统一这个过程。

基本而言,每个应用程序只需在数据库的“出站电子邮件”表中创建一行,其中包含收件人、发件人、主题、内容数据。

然后,电子邮件发件人服务(Win 服务)将从发件箱中挑选电子邮件,发送它们,然后标记为已发送。


即使我将“基本电子邮件”信息(收件人、发件人、主题、内容)存储在数据库中,我真正想做的也是存储“MailMessage”对象本身,以便电子邮件发件人服务可以反序列化原始 MailMessage,因为这将允许任何应用程序完全自定义电子邮件。

以这种方式使用 MailMessage 对象有什么问题吗?

更新:另一个目标是存储已发送电子邮件的日志 - 因此使用数据库的原因。

4

2 回答 2

6

更好的架构是让应用程序调用发送电子邮件服务上的某种公共接口。然后服务本身可以负责在数据库中记录发送。

这种架构意味着数据库成为服务的内部,因此减少了应用程序之间的耦合(每个应用程序都知道一个相对较小的公共合约而不是数据库模式)。这也意味着,如果您确实发现在数据库中存储 MailMessage 对象存在问题,那么您可以更改存储方法而无需更新所有客户端。

于 2011-03-28T18:53:54.010 回答
3

为什么要使用数据库?只需让应用程序直接调用您的电子邮件服务,提供所有信息。

如果您想将发送排队,那么您可以使用net.msmq与 WCF 的绑定,它将请求存储在服务将从中读取的可靠队列中。这一切都会为你完成。

于 2011-03-28T18:46:54.563 回答