我正在研究使用MVcMailer來製作更好的電子郵件。如何在不破壞服務層的情況下使用MVCMailer?
但是我不確定的一件事是如何組織代碼。我目前有2個項目。一個用於mvc,另一個用於我的回購和服務層。
我的第二個項目沒有MVC的知識,我想保持這種方式。
我在想,我的smtp代碼會進入服務層或包裝,然後當我需要發送電子郵件時,我會從其他服務層調用它。
那麼MVC郵件適合在哪裏?我是否在控制器中生成身體,然後將它傳遞給一個將它傳遞給我的smtp類的服務層?
我正在研究使用MVcMailer來製作更好的電子郵件。如何在不破壞服務層的情況下使用MVCMailer?
但是我不確定的一件事是如何組織代碼。我目前有2個項目。一個用於mvc,另一個用於我的回購和服務層。
我的第二個項目沒有MVC的知識,我想保持這種方式。
我在想,我的smtp代碼會進入服務層或包裝,然後當我需要發送電子郵件時,我會從其他服務層調用它。
那麼MVC郵件適合在哪裏?我是否在控制器中生成身體,然後將它傳遞給一個將它傳遞給我的smtp類的服務層?
MVCMailer似乎已經支持發送電子郵件。如果您正確設置配置,它應該能夠通過電子郵件發送填充的MailerView而無需額外的實施。
我不知道你的第二個項目在你的解決方案中的作用,但這裏有兩種可能:
可能不實用......等待 的版本「電子郵件從後臺發送 流程」
從你的第二個項目 忘掉SMTP和使用HTTP只是調用視圖 這反過來會調用MVCMailer
我的解決方案是在服務層中構建接口,然後我的服務可以用來獲取郵件消息,而創建消息的實現繼續駐留在Web層中。
的接口是在服務層:
public interface IMailMessage
{
void Send();
void SendAsync();
}
public interface IUserMailer
{
IMailMessage Welcome(WelcomeMailModel model);
}
的實現是隨後在所述幅材(MVC)項目:
public class MailMessage : MvcMailMessage, IMailMessage
{
}
public class UserMailer : MailerBase, IUserMailer
{
public UserMailer()
{
MasterName = "_Layout";
}
public IMailMessage Welcome(WelcomeMailModel model)
{
var mailMessage = new MailMessage();
mailMessage.SetRecipients(model.To);
mailMessage.Subject = "Welcome";
ViewData = new System.Web.Mvc.ViewDataDictionary(model);
PopulateBody(mailMessage, "Welcome");
return mailMessage;
}
}
最後,在服務層,所述郵件收發器接口是一個依賴的服務:
public class UserCreationService : IUserCreationService
{
private readonly IUserRepository _repository;
private readonly IUserMailer _userMailer;
public UserCreationService(IUserRepository repository, IUserMailer userMailer)
{
_repository = repository;
_userMailer = userMailer;
}
public void CreateNewUser(string name, string email, string password)
{
// Create the user's account
_repository.Add(new User { Name = name, Email = email, Password = password });
_repository.SaveChanges();
// Now send a welcome email to the user
_userMailer.Welcome(new WelcomeMailModel { Name = name, To = email }).Send();
}
}
當它在依賴注入,一個網絡連線。 UserMailer對象用於Services.IUserMail參數來構造UserCreationService對象。
我試着保持這個例子簡單易懂,但是一旦您在服務層中引用IMailMessage,就可以將它發送到您的SMTP代碼而不是僅僅調用Send()像我這樣做。出於您的目的,您可能需要充實IMailMessage接口以訪問MvcMailMessage類的其他部分。
我想知道您是否可以提供一些關於如何實現MVCMailer的信息? – Neil 2013-05-15 09:13:37