c# - 构建电子邮件发件人服务

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

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

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

Figure1. Flow Diagram of Email Sender Service

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

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

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


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

这样使用MailMessage对象有什么问题吗?

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

最佳答案

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

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

关于c# - 构建电子邮件发件人服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463551/

相关文章:

c# - 您是否需要在 using block 中设置对新对象的显式引用?

javascript - 确认删除窗口-点击删除或取消时删除记录

c# - 在 .NET ASMX 网络服务中获取 session

asp.net - 在 ASP.NET 代码后面使用 Web 服务的最佳方式

sql-server-2008 - (今天)和 30 天前之间的 MS SQL 查询

c# - 使用自定义参数取消订阅/删除事件处理程序

c# - 使用委托(delegate)在表单之间进行通信

c# - 在 Visual Studio 2012 中显示未构建的更改

asp.net - promote 方法仅在 azure 中为分布式事务返回无效值

sql-server-2008 - 为什么 SQL Server Management Studio 2008 中的服务器类型列表中缺少 SQL Server Compact Edition?