web-dev-qa-db-ja.com

メールテンプレートとしてのRazorビュー

私はmvc3で電子メールエンジンを作成していますが、電子メールテンプレートとしてカミソリビューを使用しようとしています。これは可能だと聞きましたが、まだ情報が見つかりません。

53
sTodorov

http://razorengine.codeplex.com/ を使用してこれを実現できます。 mvcの外でかみそりを使用できます。

string Email = "Hello @Model.Name! Welcome to Razor!";
string EmailBody = Razor.Parse(Email, new { Name = "World" });

実装は簡単で、プロジェクトに簡単に統合できるように http://nuget.codeplex.com/ で利用できます。

63
Buildstarted

テンプレートファイルを使用して、カミソリの電子メール本文テンプレートとして使用できます。ファイルを.Netでテキストとしてロードできるため、選択した拡張子を使用できます。テンプレートに次の例を使用してみましょう。

Hello @Model.Name,

Welcome to @Model.SiteName!

Regards,
Site Admins

そのファイルを「WelcomeMessage.cshtml」、「WelcomeMessage.template」などの名前で保存します。ソリューションエクスプローラーでファイルを選択し、[プロパティ]ウィンドウで[出力ディレクトリにコピー]を選択し、[常にコピー]を選択します。唯一の欠点は、このテンプレートがアプリケーションに付属する必要があり、クラスとしてコンパイルされないことです。

次に、メールメッセージ本文に割り当てる文字列として解析したいと思います。 Razorはテンプレートとモデルクラスを取得して解析し、必要な値を含む文字列を返します。アプリケーションに、NuGetで見つかるRazorEngineパッケージを追加する必要があります。使用法を説明する短いコード例を次に示します。

using System.IO;
using RazorEngine;

// ...
MyModel model = new MyModel { Name = "User", SiteName = "Example.com" };
string template = File.OpenText("WelcomeMessage.template").ReadToEnd();
string message = Razor.Parse(template, model);

他の回答と似ていますが、テキストファイルからテンプレートをすばやく読み込む方法を示しています。

27
jlafay

おそらく MvcMailer を考慮する必要があります。 RazorEngineは、MVCをまだ使用していない場合(Webフォームコンテキストで正常に使用している場合)(非常に)優れていますが、MVCを使用している場合は同様に利用できます。

(経由で Hanselmen's NuGet package of the week 2

13
JT.

NuGetの Essential Mail:Razor パッケージを使用することもできます。 RazorEngineの上に構築され、電子メールレンダリング用のシンプルなインターフェイスを提供します。

メールメッセージテンプレートは次のようになります

@inherits Essential.Templating.Razor.Email.EmailTemplate
@using System.Net;
@{
    From = new MailAddress("[email protected]");
    Subject = "Email Subject";
}
@section Html 
{
   <html>
      <head>
          <title>Example</title>
      </head>
      <body>
          <h1>HTML part of the email</h1>
      </body>
   </html>
}
@section Text 
{
    Text part of the email.
}

GitHubの詳細: https://github.com/smolyakoff/essential-templating/wiki/Email-Template-with-Razor

Mailzor

@thiagoleiteの言及にリンクして、私はKazi Manzur Ra​​shidのアイデアを(許可を得て)使用し、それをより使いやすくするために拡張しました。

githubプロジェクト 'mailzor' を確認してください

Nuget.org/packages/mailzor にもあります

0
Nick Josevski