Отправка писем с помощью ActionMailer.Mvc в VB, не удается найти представление
Ошибка, которую я получаю, когда пытаюсь отправить электронное письмо:
NoViewsFoundException
Вы должны предоставить представление для этого письма. Представления должны называться ~/Views/Email/VerificationEmail.html.vbhtml.txt.cshtml или ~/Views/Email/VerificationEmail.html.vbhtml.html.cshtml (или aspx для 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!
3 ответа
Конечно, вы можете иметь vbhtml
шаблоны электронной почты вам просто нужно быть осторожным с именами (.cshtml
Сообщение об исключении жестко закодировано, поэтому не путайте его)
Ваше мнение правильно названо как VerificationEmail.html.vbhtml
вам просто нужно удалить все префиксы из имени представления в Email
вызов:
Return Email("VerificationEmail", model)
Потому что ActionMailer будет автоматически добавлять префиксы и выбирать правильный шаблон для вас.
Обратите внимание, что в настоящее время вы не можете использовать относительные имена, подобные которым начинаются с ~
например "~/Views/..."
(Я не знаю, это ошибка или особенность).
Так что вам нужно поместить свой почтовый шаблон в обычные папки просмотра, например
/Views/{MailControllerName}/
/View/Shared/
Прочитав пару вопросов и ответ, он может заставить его работать с этим:
public override string ViewPath {
get { return AppDomain.CurrentDomain.BaseDirectory + @"\EmailTemplates\"; }
}
Была та же проблема, что и у Чеда Ричардсона. Чтобы решить проблему, возникающую при попытке отправить письмо из другой области, просто добавьте этот код в метод Application_Start:
var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
razorEngine.ViewLocationFormats = razorEngine.ViewLocationFormats.Concat(new string[]
{
"~/Areas/.../{0}.cshtml"
}).ToArray();