2015-10-14 3 views
8

मैंने रेजर सिंटेक्स से एक ईमेल टेम्पलेट डिज़ाइन किया है। जब मैं इस टेम्पलेट को सी # कोड और एसएमटीपी प्रोटोकॉल का उपयोग करके ईमेल के रूप में भेजता हूं, तो मुझे ईमेल बॉडी के रूप में नंगे रेजर और HTML मार्कअप मिलते हैं। क्या मैं इस दृष्टिकोण में गलत हूं? क्या रेजर पेजेस को ईमेल टेम्पलेट के रूप में अनुमति दी गई है?रेजर पेज टेम्पलेट के रूप में पृष्ठ देखें

यहाँ मेरी पृष्ठ

@inherits ViewPage 
@{ 
Layout = "_Layout"; 
ViewBag.Title = ""; 
} 
<div class="container w-420 p-15 bg-white mt-40"> 
<div style="border-top:3px solid #22BCE5">&nbsp;</div> 
<span style="font-family:Arial;font-size:10pt"> 
    Hello <b>{UserName}</b>,<br /><br /> 
    Thanks for Registering to XYZ Portal<br /><br /> 
    <a style="color:#22BCE5" href="{Url}">Click to Confirm Email</a><br /> 

    <br /><br /> 
    Thanks<br /> 
    Admin (XYZ) 
</span> 

अद्यतन ..

using (StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath("~/ContentPages/EmailConfTemplate.cshtml"))) 
    { 
    body = reader.ReadToEnd(); 
    //Replace UserName and Other variables available in body Stream 
    body = body.Replace("{UserName}", FirstName); 

    } 

बाद में मैं के रूप में एसएमटीपी कोड की जगह रहा है ..

MailMessage message = new MailMessage(
    ApplicationWideData.fromEmailId, // From field 
    ToEmailId, // Recipient field 
    "Click On HyperLink To Verify Email Id", // Subject of the email message 
    body 
    ); 
+0

कुछ को रेज़र को संसाधित करने और HTML को थूकने की आवश्यकता है।आप अपने कोड में टेम्पलेट का उपयोग कैसे कर रहे हैं जो ईमेल तैयार करता है? – SWeko

+0

@SWeko मैं रेजर सिंटेक्स का उपयोग कर ईमेल बॉडी बना रहा हूं। भेजने के लिए मैं सी # – Lara

+0

में एसएमटीपी का उपयोग कर रहा हूं क्या आप कोड दिखा सकते हैं? – SWeko

उत्तर

10

ईमेल केवल संदेशों दो प्रारूपों को समझें: सादा पाठ और एचटीएमएल। चूंकि रेजर न तो है, इसलिए इसे किसी इंजन द्वारा संसाधित करने की आवश्यकता होगी, ताकि यह आपको जेनरेट किए गए HTML को वापस दे।

यह वही होता है जब आप दृश्यों के पीछे एएसपी.नेट एमवीसी में रेजर का उपयोग करते हैं। रेजर फ़ाइल को आंतरिक सी # कक्षा में संकलित किया जाता है, जिसे निष्पादित किया जाता है, और निष्पादन का परिणाम HTML की स्ट्रिंग सामग्री है, जो क्लाइंट को भेजा जाता है।

आपकी समस्या यह है कि आप चाहते हैं कि उस प्रक्रिया को चलाने के लिए और केवल ब्राउज़र को भेजे जाने की बजाय HTML को स्ट्रिंग के रूप में प्राप्त करने की आवश्यकता हो। उसके बाद आप एचटीएमएल स्ट्रिंग के साथ जो भी चाहें कर सकते हैं, इसे ई-मेल के रूप में भेजना भी शामिल कर सकते हैं।

ऐसे कई पैकेज हैं जिनमें इस शक्ति को शामिल किया गया है, और मैंने Westwind.RazorHosting सफलतापूर्वक उपयोग किया है, लेकिन आप इसी तरह के परिणामों के साथ RazorEngine का भी उपयोग कर सकते हैं। मैं स्टैंडअलोन गैर-वेब अनुप्रयोगों के लिए रेजोरहोस्टिंग पसंद करता हूं, और वेब अनुप्रयोगों के लिए रेजोरइंजिन

यहां मेरे कुछ कोड का एक (sanitized) संस्करण है - मैं वेस्टविंड का उपयोग कर रहा हूं। रेज़रहोस्टिंग एक विंडोज़ सेवा से रेज़र-स्वरूपित ईमेल भेजने के लिए , दृढ़ता से टाइप किए गए दृश्य का उपयोग कर।

RazorFolderHostContainer host = = new RazorFolderHostContainer(); 
host.ReferencedAssemblies.Add("NotificationsManagement.dll"); 
host.TemplatePath = templatePath; 
host.Start(); 
string output = host.RenderTemplate(template.Filename, model); 

MailMessage mm = new MailMessage { Subject = subject, IsBodyHtml = true }; 
mm.Body = output; 
mm.To.Add(email); 

var smtpClient = new SmtpClient(); 
await smtpClient.SendMailAsync(mm); 
+1

.cshtml रखना बहुत आसान है - रेजर एक महान टेम्पलेटिंग इंजन है - विशेष रूप से यदि आपके पास अलग-अलग मॉडल हैं, और विभिन्न भाषाओं में टेम्पलेट्स हैं ... उल्लेख नहीं है कि आप हमेशा फ़ाइल को पकड़ सकते हैं, इसे वास्तविक दृश्य के रूप में सेट कर सकते हैं, और इसे ब्राउज़र में देख सकते हैं। – SWeko

+1

वहाँ एएसपीनेट कोर 2 विकल्प है? – Liero

1

चेक बाहर RazorEngine (https://razorengine.codeplex.com/) की तरह एक रेजर प्रोसेसर जो NuGet पर उपलब्ध है। यह एक आउटपुट बनाने के लिए रेज़र को संसाधित करता है, जो तब आप अपने ईमेल के बॉडी के रूप में उपयोग करेंगे।

3

क्या आपने MVC Mailer पर एक नज़र डाली है?

यह एक नि: शुल्क पैकेज GitHub (https://github.com/smsohan/MvcMailer)

से उपलब्ध एक भी https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

इसके लिए कदम गाइड द्वारा कदम यह बहुत Nuget पर भी नहीं है है। https://www.nuget.org/packages/MvcMailer

अनिवार्य रूप से यह आपके रेज़र दृश्य को HTML में पार्स करेगा।

0

Mailzory प्रोजेक्ट रेज़र टेम्पलेट्स वाले ईमेल भेजने के लिए एक मूल्यवान और सुविधाजनक विकल्प है।

// template path 
var viewPath = Path.Combine("Views/Emails", "hello.cshtml"); 
// read the content of template and pass it to the Email constructor 
var template = File.ReadAllText(viewPath); 

var email = new Email(template); 

// set ViewBag properties 
email.ViewBag.Name = "Johnny"; 
email.ViewBag.Content = "Mailzory Is Funny"; 

// send email 
var task = email.SendAsync("[email protected]", "subject"); 
task.Wait() 

यह प्रोजेक्ट गिथब में होस्ट किया गया है। Mailzory के लिए nuget package भी उपलब्ध है।

संबंधित मुद्दे