如何在MVC中发送电子邮件地址验证邮件?

时间:2010-02-24 13:31:42

标签: asp.net-mvc email

在网络表单中,我使用MailDefinition类发送电子邮件模板。我怎样才能对MVC做同样的事情?

[HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus = 
              MembershipService.CreateUser(model.UserName, model.Password, model.Email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                // TODO: Send email verification code go here?

                //FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index", "Home");
            }
            else
              ModelState.AddModelError("", ErrorCodeToString(createStatus));                
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }

我正在寻找符合MVC设计模式的解决方案,不确定如何去做。

2 个答案:

答案 0 :(得分:1)

我创建了一个基本控制器,它有一个虚拟方法sendEmail(MyBaseViewModel模型),可以在继承的控制器上覆盖,但具有在视图模型中查找Email,FromEmail和Subject的逻辑,如果找到则设置sendMail布尔值为true并在viewmodel中查找AlternateEmailView字符串。

然后我有一个自定义视图结果,它查找sendMail属性的真实性,然后实际呈现视图(或备用视图)并发送电子邮件,然后将普通视图呈现给浏览器。似乎工作得很好,并允许我将我的电子邮件内容视为另一种维护视图。

我应该补充一点,我的视图名称中也有一个约定,这样如果我不提供AlternateEmailView属性,它会查找ViewName_Email,然后发送普通视图,如果找不到。

哈尔

答案 1 :(得分:1)

imo,最好的方法是通过合成来解决,而不是继承。

我通常有一个我使用的INotifier接口,它有一个接受用户,标题和正文的Notify方法。然后,我可以手动将INotfier设置为我的EmailNotifier实现,或者通过构造函数或通过IoC容器传递它。

在任何情况下,我的EmailNotifier实现都会从正文中提取用户的电子邮件,并使用System.Net.Mail命名空间邮件对象发送电子邮件。这有一个额外的好处,System.Net.Mail已经为你找到了如何从配置文件中获取所有电子邮件设置,所以你有一个地方设置/更新设置。

我通常还有一个NullNotifier,它实现了INotifier但什么也没做,所以我的控制器可以安全地调用notifier.Notify(用户,标题,正文)而不用担心NRE。

这里有关于System.Net.Mail的更多信息:http://www.systemnetmail.com/