0

我想在我的应用程序中使用 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();
    }
}

在 MyMailer 项目中,Views/MyMailer/Invitation.cshtml有一个文件,其中包含一些文本。

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

我什至在 中放了一个断点Views/MyMailer/_Layut.cshtml --> RenderBody(),但它从来没有进入过它。

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

4

1 回答 1

2

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

于 2013-05-03T20:28:48.353 回答