发送电子邮件的位置在哪里?服务层或网络层?

时间:2011-03-13 23:48:02

标签: asp.net-mvc wcf design-patterns

我几周来一直遇到这种设计模式问题。我在哪里放置发送电子邮件的逻辑?可以通过asp.net mvc web界面或通过asp.net应用程序内部托管的wcf端点访问行为。

以下是该应用的功能:

  1. 电子邮件通知。
  2. 模板渲染 - 这意味着我必须知道url结构(动作,基地址等)。
  3. 目前,我将基本网址和路径存储在web.config文件中,并在服务层中包含此电子邮件服务。

    一个特别的功能是向用户发送确认电子邮件并将生成的确认网址发送给他们。 (不知道如何从服务层生成这个URL)

3 个答案:

答案 0 :(得分:6)

永远不应该从网络层提供电子邮件。您永远不希望用户在发送电子邮件时等待。

最好的办法是创建一个持久的电子邮件队列(sql很好),另一个作业访问该队列以发送电子邮件。这使您能够重新发送失败的电子邮件,并在Web请求线程之外完全运行它们。

答案 1 :(得分:4)

jfar说的是真的;那就是说,你可以使用Postal生成你的电子邮件,然后再将这些电子邮件存储在数据库中,正如jfar建议的那样。

来自邮政网站:

  

Postal允许您使用以下方式创建电子邮件   定期的MVC观点。

这意味着您的Email文件夹下会有一个Views文件夹;这些视图实际上是您的电子邮件模板,并且可以完全访问所有其他视图的Html和URL帮助程序,这可能使您可以轻松生成确认URL或您可能需要的任何内容。

邮政包含和IEmailService与具体EmailService实施的界面。此服务允许您直接发送电子邮件,或者更好的是生成常规 MailMessage 对象。然后,您可以将准备好的电子邮件存储在数据库的表中,稍后通过后台作业发送。

答案 2 :(得分:0)

您还可以在Web服务器计算机上运行SMTP服务器,只需让您的业务逻辑层将邮件发送到该SMTP服务器。

只要SMTP服务器启动并运行,您的Web应用程序就不会出现性能损失,SMTP服务器本身会对传入的请求进行排队,并在后台处理它们。