我应该从哪里发送确认电子邮件?

时间:2009-06-23 16:02:01

标签: c# asp.net-mvc

我正在将邮件列表集成到asp.net MVC中的现有CMS中。

我需要向订阅者发送确认电子邮件。我应该从哪里发送它,控制器,还是服务层?

澄清:我肯定会创建一个名为SendConfirmationEmail()的单独服务方法。问题是谁将其称为处理注册表单的控制器或将待处理请求添加到DB的服务?

显然我可以从两者发送它但是哪个是适当的MVC?

2 个答案:

答案 0 :(得分:3)

我想标准方法是将一个电子邮件服务注入您的控制器,控制器只调用_emailService.Enqueue(myMessage)之类的服务操作。

public class MyController
{
    IEmailService _emailService;

    public MyController(IEmailService emailService)
    {
        _emailService = emailService;
    }

    public ActionResult Email()
    {
        var myMessage = new MyMessage();

        // Initialize message here

        _emailService.Enqueue(myMessage);
        return View();
    }
}

一些好处是:

  • 重用:如果你需要使用 另一个电子邮件功能 控制器/行动
  • 可测试性:您可以模拟电子邮件服务 单元测试,所以你的测试不依赖 在SMTP服务器上
  • 您可以替换邮件实施,而不是直接发送邮件将其排队以进行异步发送

答案 1 :(得分:0)

MVC鼓励分离关注点,以便在层中放置行为,以解决行为的问题。由于我不熟悉您的架构,我不知道您的“服务层”是什么意思,但由于发送电子邮件与您网站的模型,视图或控制器几乎没有关系,我建议您将此功能转移到应用程序中它所属的层。

如果您的服务层实际上是应用程序层,那么我会将代码放在那里。