Используйте Razor views в качестве шаблонов электронной почты в приложении Web Forms

#asp.net #webforms #razor #email-templates

#asp.net #веб-формы #razor #шаблоны электронной почты #электронная почта-шаблоны

Вопрос:

У меня есть asp.net Приложение Web Forms, которому необходимо отправлять электронные письма. Мне нравится синтаксис Razor, и поскольку вы можете использовать Razor вне MVC, я подумал, что попробую использовать это. Я видел, что вы можете программно передать строку шаблона в razor, но я бы хотел сохранить свои шаблоны razor в виде отдельных файлов .cshtml.

Есть ли у кого-нибудь простой, проверенный на идиотизм совет относительно того, как это сделать? Я пытался загрузить их из файла, подобного этому:

 UserDetails userDetails = new UserDetails {Name = "Fred"};
string template = File.OpenText("Email/UserDetailsEmail.cshtml").ReadToEnd();            
string messageText = Razor.Parse(template, userDetails);
  

Все безрезультатно. При обнаружении файла возникает исключение. Я использую razorengine dll.

У меня все остальное работает, smtp-сервер и т.д., только не представления.

Любая помощь приветствуется.

Ответ №1:

Вам нужно получить полный путь к файлу; относительные пути в конечном итоге будут относиться к неправильному местоположению.

Написать

 File.OpenText(Server.MapPath("~/Email/UserDetailsEmail.cshtml"))
  

Ответ №2:

Я бы использовал инструмент MvcMailer, который вы можете настроить с помощью Nuget и который имеет строительные леса для создания представлений.

Это очень хорошо написанное приложение, и его можно легко добавить к вашему:

https://github.com/smsohan/MvcMailer

http://www.codeproject.com/KB/aspnet/MvcMailerNuGet.aspx

Комментарии:

1. Знаете ли вы, как вызвать razor view из проекта web forms. Когда я вызываю ‘PopulateBody(MailMessage, viewName: «UserDetails»);’ Я получаю исключение: «Значение не может быть нулевым. rnpпараметрическое имя: RouteData». Существуют ли какие-либо простые инструкции по настройке MvcMailer внутри приложения web forms?