【问题标题】:Where does sending emails go? Service layer or web layer?发送电子邮件到哪里去?服务层还是 Web 层?
【发布时间】:2011-03-13 23:48:01
【问题描述】:

我已经有这个设计模式问题好几个星期了。我将发送电子邮件的逻辑放在哪里?可以通过 asp.net mvc Web 界面或托管在 asp.net 应用程序内的 wcf 端点访问行为。

以下是应用程序的功能:

  1. 电子邮件通知。
  2. 模板渲染 - 这意味着我必须知道 url 结构(操作、基地址等)。

目前,我将基本 url 和路径存储在 web.config 文件中,并将此电子邮件服务放在服务层中。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 从来没有?相当广泛的声明。
    • 在哪里生成电子邮件?我需要创建一个绝对 URL 发送给用户。但它可以由 wcf 或 asp.net mvc 触发。
    【解决方案2】:

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

    来自邮政网站:

    Postal 允许您使用以下方式创建电子邮件 常规 MVC 视图。

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

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

    【讨论】:

      【解决方案3】:

      您也可以在您的网络服务器机器上运行一个 SMTP 服务器,然后让您的业务逻辑层将邮件发送到该 SMTP 服务器。

      只要 SMTP 服务器启动并运行,您的 Web 应用程序就不会受到性能影响,并且 SMTP 服务器本身会将传入请求排队并在后台处理它们。

      【讨论】:

      • 并非所有 SMTP 服务器都以这种方式运行。但由于这是 ASP.NET,因此使用本地 IIS SMTP 并使用提取目录将其传送到它会非常好。
      猜你喜欢
      • 2010-10-22
      • 2011-08-09
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多