2011-03-28 63 views
5

我有一对夫妇的Web应用程序,所有应用发送电子邮件,无论是的联系方式,或某种通知更新等的建立一个电子邮件发件人服务

我发现的问题是,没有真的没有办法跟踪它正在从Web应用程序发送的电子邮件,所以我想出了一个可能的解决方案:

Figure1. Flow Diagram of Email Sender Service

这是相当直截了当真的 - 而不必每个Web应用程序发送电子邮件本身我想通过创建一个中央电子邮件发件人服务来统一过程冰。

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

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


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

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

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

回答

5

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

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

+1

我喜欢这个主意!我可以为电子邮件发件人提供托管的WCF服务,Web应用程序可以指向它,WCF可以处理将电子邮件存入数据库(用于日志记录)并立即发送电子邮件。 – Dal 2011-03-28 19:13:26

3

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

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

+0

对不起,约翰,我没有说清楚,我真的想看到发送的所有电子邮件的某种形式的日志。我知道如果需要的话,你可以通过SMTP日志浏览这个日志,但是与数据库表相比,我觉得这很麻烦。我认为使用你提到的WCF是要走的路:) – Dal 2011-03-28 19:13:50

+0

@Dal:继续前进并使用数据库记录,但我会直接使用WCF将请求发送到服务。 – 2011-03-28 19:14:59