1

我尝试发送电子邮件时收到的错误是:

NoViewsFoundException

您必须提供此电子邮件的视图。视图应命名为 ~/Views/Email/VerificationEmail.html.vbhtml.txt.cshtml 或 ~/Views/Email/VerificationEmail.html.vbhtml.html.cshtml(或 WebFormsViewEngine 的 aspx),具体取决于您希望呈现的格式。

在线错误:

Return Email("~/Views/Email/VerificationEmail.html.vbhtml", model)

电子邮件不能以 .vbhtml 格式发送,必须以 .cshtml 格式发送吗?这如何适用于 VB?

这是我的代码控制器:

Imports ActionMailer.Net.Mvc

Public Class EmailController
    Inherits MailerBase

    Public Function VerificationEmail(ByVal model As RegisterModel) As EmailResult

        [To].Add(model.Email)
        From = "me@my.org"
        Subject = "Thanks for registering with us!"
        Return Email("~/Views/Email/VerificationEmail.html.vbhtml", model)

    End Function

End Class

这是我的看法:

@modelType MyBlog.RegisterModel

@Code
    Layout = Nothing
End code

Welcome to My Cool Site, @Model.UserName

We need you to verify your email.  Click this nifty link to get verified!

@Html.ActionLink("Verify", "Account", New With {.code = Model.Email})

Thanks!
4

3 回答 3

4

在阅读了几个问题和答案之后,它可以让它与这个一起工作:

public override string ViewPath {
        get { return AppDomain.CurrentDomain.BaseDirectory + @"\EmailTemplates\"; }
    }
于 2013-08-01T03:07:42.127 回答
2

当然你可以有vbhtml电子邮件模板,你只需要小心命名(.cshtmls 异常消息是硬编码的,所以不要混淆)

您的视图命名正确,因为VerificationEmail.html.vbhtml您只需要从Email调用中的视图名称中删除所有前缀:

Return Email("VerificationEmail", model)

因为 ActionMailer 会自动添加前缀并为您选择正确的模板。

请注意,目前您不能使用~以eg开头的相对视图名称"~/Views/..."(我不知道这是错误还是功能)。

因此,您需要将邮件模板放入常规视图文件夹,例如

  • /Views/{MailControllerName}/
  • /View/Shared/
于 2012-08-20T15:39:02.810 回答
1

和查德·理查森有同样的问题。要解决尝试从其他区域发送电子邮件时发生的问题,只需将此代码添加到 Application_Start 方法:

var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
    razorEngine.ViewLocationFormats = razorEngine.ViewLocationFormats.Concat(new string[] 
    { 
        "~/Areas/.../{0}.cshtml"
    }).ToArray();
于 2013-10-22T14:37:12.353 回答