2016-08-08 7 views
1

私は電子メールを送信しようとしています。通常の電子メールを送信できます。 しかし、私は電子メールでテンプレート(.cshtml)を送信しました。SendGrid + MVC4を使用して.cshtmlをメールボディとしてレンダリングするには?

どうすればいいのか教えてください。ここで

私のコードです:

コントローラー:

public ActionResult SendEmailDeviceInfoDisplay(List<String> deviceDatailData) 
{ 
    string body = ""; 
    var emailContoller = new EmailController(); 
    string email = deviceDatailData[9]; 
    body = "<html>Event Name: " + deviceDatailData[0] +"</html>"; 

    var sendEmail = emailContoller.SendDeviceAndEventInfoMail(email, body); 
    ViewBag.info = deviceDatailData[8]; 
    return PartialView("SendEmailConformationDisplay"); 
} 

SendGrid方法:

public string SendDeviceAndEventInfoMail(string email, string body) 
{ 
    var myMessage = new SendGridMessage(); 
    myMessage.From = new MailAddress("[email protected]"); 
    List<String> recipients = new List<String> { email }; 
    myMessage.AddTo(recipients); 
    myMessage.Subject = "Information"; 
    myMessage.Html = body; 
    var transportWeb = new Web(nc); 
    transportWeb.Deliver(myMessage); 
    return "done"; 
} 

Ajaxのコール:

$(function() { 
    var loggedInEmailId = $('#buildingSession').val(); 
    $('#sendAsEmailDeviceConformationDialog').dialog({ 
     autoOpen: false, 
     width: '27.5em', 
     position: { my: 'top', at: 'top+150' }, 
     opacity: 100, 
     resizable: false, 
     //title: 'Product', 
     modal: true, 
     closeOnEscape: false, 
     open: function (event, ui) { 
      $(".ui-dialog-titlebar-close", ui.dialog | ui).hide(); 

      $.ajax({ 
       url: '/Overview/SendEmailDeviceInfoDisplay', 
       traditional: true, 
       data: data,      
       success: function (result) { 
        $('.ui-button-text').hide(); 
        $('#sendAsEmailDeviceConformationDialog').html(result); 
       }, 
       error: function() { 
       } 
      }); 
     } 
    }); 
} 

答えて

1

私はこれまでと同様の要件を満たしていましたが、それ以上の問題が見つかった場合は価値がありましたので、別の方法をとってきました。これはあなたの質問に直接答えるものではありませんが、問題の代替アプローチです。

基本的な考えは、cshtmlの使用の複雑さを避けることでした。だから私は、次の基本的なPOCOオブジェクトを使用し、それをデータベースに保存された:

public interface IEmailTemplate 
{ 
    ... other db related fields 
    string Name { get; set; } 
    string FromEmail { get; set; } 
    string FromDisplayName { get; set; } 
    string Subject { get; set; } 
    string TextMessage { get; set; } 
    string HtmlMessage { get; set; } 
    EmailPriority Priority { get; set; } 
} 

これは私がプロジェクトを再コンパイルし、再デプロイせずに電子メールを管理することができます。

私はそれを使用する必要があるときに、テンプレートを読み込んで電子メールメッセージを作成します。私は以下のロジックを使用してデータ交換を行うためにSmartFormat.NETを使用することを支援するには:

private string DataReplacements(string input, object args) 
    { 
     if (input.IsNullOrEmptyOrBlank()) 
     { 
      return string.Empty; 
     } 
     return args != null ? Smart.Default.Format(input, args) : input; 
    } 

    subject = DataReplacements(template.Subject, dataModel); 
    textMessage = DataReplacements(template.TextMessage, dataModel); 
    htmlMessage = DataReplacements(template.HtmlMessage, dataModel); 

をもう一度あなたの直接の質問に答えていない一方で、このパスは、手間をかけずに私をたくさんより多くの柔軟性を与えました。

+0

お返事ありがとうございます。しかし、私はデータベースに保存する必要はありません。すでにデータを手元に持っています。データを.cshtmlに追加するだけで、.cshtmlはメールで送信する必要があります。どうすれば可能か、それが可能かどうか教えてください。 –

+1

http://mehdi.me/generating-html-emails-with-razorengine-introduction/ –

関連する問題