构建电子邮件发件人服务

时间:2011-03-28 18:42:45

标签: c# asp.net sql-server-2008 mailmessage

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

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

Figure1. Flow Diagram of Email Sender Service

实际上非常直接 - 不是让每个Web应用程序自己发送电子邮件,而是希望通过创建中央电子邮件发件人服务来统一该过程。

在基本术语中,每个应用程序只会在数据库的“出站电子邮件”表中使用“收件人”,“发件人”,“主题”,“内容”数据创建一行。

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


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

以这种方式使用MailMessage对象有任何问题吗?

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

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