4

私のアプリケーションは 3 つの層に分かれています。

  1. ビュー (MVC)
  2. ビジネスロジック (サービス)
  3. データ (LINQ/SQL)

私のサービス層全体で、現在 SmtpClient と MailMessage を介して平文の電子メールを送信する EmailSender サービスへの呼び出しがあります。私が知る限り、かなり標準的なもの。

私は現在、MailMessage をモデルとして受け入れ、メッセージの本文に挿入できる HTML を生成する Razor テンプレートを使用して、これらの電子メールの本文をフォーマットしようとしています。

今、これは私が持っているものです:

public void SendAsyncEmail(MailMessage message)
        {
            message.IsBodyHtml = true;

            message.body = {generate html string from body here using razor?}

            // Async code here
        }

次のようなかみそりビューを定義するとします。

@model System.Net.Mail.MailMessage

<div>
    <h1>@Model.Subject</h1>
    <p>@Model.Body</p>
</div>

サービス メソッドからこのビューに MailMessage を渡し、そこから電子メールの本文の文字列を生成するにはどうすればよいですか?

4

1 に答える 1

6

ビューをレンダリングするには、ビュー エンジンビュー コンテキストを使用する必要があります。ビュー エンジンは、ビューの検索とレンダリングを担当します。ビュー コンテキストには、ビューとその状態に関する情報が含まれています。

public ActionResult Index()
{
    StringWriter sw = new StringWriter();
    ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, "Index", "_Layout");
    ViewContext context = new ViewContext(ControllerContext, result.View, ViewData, TempData, sw);
    result.View.Render(context, sw);
    result.ViewEngine.ReleaseView(ControllerContext, result.View);

    string viewString = sw.ToString();

    return Content(viewString);
}

モデルの使用ViewData(つまり、コントローラーから利用可能なプロパティ) を渡すには。

ViewData.Model = new MailMessage();

また、現在のアプローチに代わるものとして、PostalMvcMailer強くお勧めします。 どちらも、ビュー (剃刀など) を使用して電子メールを生成するという同じ原則に基づいて機能します。セットアップは非常に簡単で、報酬はそれだけの価値があります。

アプリケーションで大量のメールを使用する場合は、試してみることをお勧めします。

于 2013-10-20T22:06:02.257 に答える