我尝试发送电子邮件时收到的错误是:
NoViewsFoundException
您必须提供此电子邮件的视图。应该命名视图 〜/ Views / Email / VerificationEmail.html.vbhtml.txt.cshtml或 〜/ Views / Email / VerificationEmail.html.vbhtml.html.cshtml(或aspx for WebFormsViewEngine)取决于您希望呈现的格式。
在线错误:
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!
答案 0 :(得分:4)
在阅读了几个问题并回答之后,它可以使用它:
public override string ViewPath {
get { return AppDomain.CurrentDomain.BaseDirectory + @"\EmailTemplates\"; }
}
答案 1 :(得分:2)
当然你可以拥有vbhtml
个电子邮件模板,你只需要注意命名(.cshtml
的异常消息是硬编码的,所以不要混淆它)。
您的视图被正确命名为VerificationEmail.html.vbhtml
,您只需要从Email
调用中删除视图名称中的所有前缀:
Return Email("VerificationEmail", model)
因为ActionMailer会自动添加前缀并为您选择正确的模板。
请注意,目前无法使用以~
开头的相对视图名称,例如"~/Views/..."
(我不知道这是一个错误或特征)。
因此您需要将邮件模板放到常规视图文件夹中,例如
/Views/{MailControllerName}/
/View/Shared/
答案 2 :(得分:1)
与Chad Richardson有同样的问题。要解决尝试从其他区域发送电子邮件时发生的问题,只需将此代码添加到Application_Start方法:
var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
razorEngine.ViewLocationFormats = razorEngine.ViewLocationFormats.Concat(new string[]
{
"~/Areas/.../{0}.cshtml"
}).ToArray();