McvMailer没有看到观点

时间:2013-05-03 20:00:45

标签: c# asp.net-mvc-4 mvcmailer

我想在我的应用程序中使用MvcMailer。我创建了一个名为MyMailer的新类库项目。现在我想在我的MVC应用程序中使用它。

// mailer    
public class MyMailer : MailerBase, IEdoctorMailer  
{
    public MyMailer()
    {
        MasterName = "_Layout";
    }

    public virtual MvcMailMessage Invitation()
    {
        //ViewBag.Data = someObject;
        var msg = Populate(x =>
        {
            x.Subject = Labels.Invitation;
        x.ViewName = "Invitation";
        x.From = new MailAddress("xxx@gmail.com");
        x.To.Add("yyy@gmail.com");
        });

        return msg;
    }
}

//mvc controller
IMyMailer mailer = new MyMailer();
var inv = mailer.Invitation();
inv.Send(new DefaultSmtpClient()); // see below

public class DefaultSmtpClient : SmtpClient, ISmtpClient
{
    public DefaultSmtpClient() : base("smtp.gmail.com", 587)
    {
        EnableSsl = true;
        UseDefaultCredentials = false;
        Credentials = new NetworkCredential("login", "pass");         
    }

    public void SendAsync(MailMessage mailMessage)
    {
        throw new NotImplementedException();
    }
}

Views/MyMailer/Invitation.cshtml的MyMailer项目中,有一个文件中包含一些文字。

当我发送电子邮件时,它实际上已到达。但是这个邀请视图不包括在内(根本没有身体)。我认为这是因为发送方法是从mvc项目执行的,但这只是我的猜测。

我甚至在Views/MyMailer/_Layut.cshtml --> RenderBody()中设置了一个断点,但它从未涉足过它。

我应该怎么做才能包含视图?

1 个答案:

答案 0 :(得分:2)

由于您的MvcMailer视图位于类库中,因此您必须通过覆盖ViewEngine或VirtualPathProvider告诉MVC项目在何处以及如何找到它们。