2015-10-14 14 views
8

Tôi đã thiết kế mẫu email từ cú pháp dao cạo. Khi tôi gửi mẫu này dưới dạng Email bằng cách sử dụng mã C# và giao thức SMTP, tôi nhận được các đánh dấu Razor và HTML trống dưới dạng Email Body. Tôi có sai trong cách tiếp cận này không? Trang dao cạo có được cho phép dưới dạng mẫu email không?Trang xem dao cạo làm mẫu email

Đây là trang của tôi

@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> 

Cập nhật ..

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); 

    } 

Sau đó tôi đang thay thế Bộ luật SMTP như ..

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

Cần phải xử lý dao cạo và nhổ HTML ra.Bạn đang sử dụng các mẫu trong mã của bạn để chuẩn bị email như thế nào? – SWeko

+0

@SWeko Tôi đang tạo cơ thể Email bằng cách sử dụng Razor Syntax.For Gửi tôi đang sử dụng SMTP trong C# – Lara

+0

Bạn có thể hiển thị mã không? – SWeko

Trả lời

10

Email chỉ thông điệp hiểu hai định dạng: văn bản thuần tuý và HTML. Kể từ khi Razor không phải là, nó sẽ cần phải được xử lý bởi một số động cơ, để nó cung cấp cho bạn trở lại HTML được tạo ra.

Đó là chính xác những gì sẽ xảy ra khi bạn sử dụng Razor trong ASP.NET MVC, đằng sau hậu trường. Tệp Razor được biên dịch thành một lớp C# bên trong, được thực hiện và kết quả của việc thực thi là nội dung chuỗi của HTML, được gửi tới máy khách.

Vấn đề của bạn là bạn muốn và cần xử lý để chạy, chỉ để lấy lại HTML dưới dạng chuỗi thay vì được gửi tới trình duyệt. Sau đó, bạn có thể làm bất cứ điều gì bạn muốn với chuỗi HTML, bao gồm gửi nó như là một e-mail.

Có một số gói bao gồm sức mạnh này và tôi đã sử dụng thành công Westwind.RazorHosting, nhưng bạn cũng có thể sử dụng RazorEngine với các kết quả tương tự. Tôi thích RazorHosting cho các ứng dụng không độc lập trên web và RazorEngine cho các ứng dụng web

Đây là phiên bản (đã được vệ sinh) của một số mã của tôi - Tôi đang sử dụng Westwind.RazorHosting để gửi email định dạng bằng dao cạo từ dịch vụ cửa sổ , sử dụng chế độ xem được nhập mạnh mẽ.

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

Thật dễ dàng để giữ .cshtml - Dao cạo là một công cụ tạo khuôn mẫu tuyệt vời - đặc biệt nếu bạn có các kiểu máy khác nhau và các mẫu bằng các ngôn ngữ khác nhau, v.v ... Chưa kể bạn luôn có thể lấy tệp, đặt nó làm chế độ xem thực và xem trong trình duyệt. – SWeko

+1

có thay thế lõi asp.net 2 không? – Liero

1

Kiểm tra bộ xử lý dao cạo như RazorEngine (https://razorengine.codeplex.com/) có sẵn trên NuGet. Nó xử lý dao cạo để tạo ra một đầu ra, đó là những gì bạn sẽ sử dụng làm cơ thể của email của bạn.

0

Dự án Mailzory là một lựa chọn có giá trị và thuận tiện cho việc gửi email có mẫu Razor.

// 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() 

dự án này được lưu trữ tại Github. Ngoài ra còn có sẵn nuget package cho Mailzory.

Các vấn đề liên quan