Дизайн Вопрос для отправки уведомлений по электронной почте - PullRequest
1 голос
/ 20 июня 2011

У меня очень простой вопрос, однако решение может быть несколько сложным.

  1. Как разработчики веб-сайтов рассылают электронные письма, такие как ссылки на забытый пароль, сообщения о регистрации и / или любые другие уведомлениякоторые нужно отправить.
  2. Хранят ли разработчики сообщения на SQL-сервере, в отдельном классе, XML ??

Я использую модель Onion, и мой SMTP-интерфейс находится в приложенииОднако .core мой базовый класс для отправки почты находится в Infrastructure.backends.Я не хочу, чтобы мои прикладные сервисы зависели от бэкэндов, но я не уверен, что это неправильно, или я являюсь OCD.

Я использую Ninject в качестве IOC / DI.

Ответы [ 4 ]

6 голосов
/ 20 июня 2011

Использование Почтовый .Я думаю, что это самый эффективный способ разработки шаблонов электронной почты.Архитектура может быть построена с учетом этого.Это позволяет нам изменять шаблоны без повторной компиляции кода.

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

2 голосов
/ 20 июня 2011

Если вы отправляете электронные письма в формате html, я использую уменьшенную главную страницу / макет и просмотры.Затем я позволил контроллеру отобразить это представление в строку для использования в электронных письмах.Это как любой другой вид и модель mvc.

0 голосов
/ 20 июня 2011

Слегка изменено из поста, который я нашел, похоже, это правильный путь к просмотру. По крайней мере, это начало.
открытый интерфейс IViewMailer { string RenderPartialViewToString (string viewName, объектная модель, ControllerContext controllerContext); }

public class ViewMailer : IViewMailer
{
    #region IViewMailer Members

    public string RenderPartialViewToString(string viewName, object model, ControllerContext controllerContext)
    {
        if (string.IsNullOrEmpty(viewName))

            viewName = controllerContext.RouteData.GetRequiredString("action");
        controllerContext.Controller.ViewData.Model = model;
        using (var stringWriter = new StringWriter())
        {
            ViewEngineResult viewEngineResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
            var viewContext = new ViewContext(controllerContext, viewEngineResult.View,
                                              controllerContext.Controller.ViewData,
                                              controllerContext.Controller.TempData, stringWriter);
            viewEngineResult.View.Render(viewContext, stringWriter);
            return stringWriter.GetStringBuilder().ToString();
        }
    }

    #endregion
}
0 голосов
/ 20 июня 2011

В c # вы System.Net.Mail.Я сделаю для тебя большинство вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...