2010-03-31 7 views
15

Tôi đang thử nghiệm gửi một số email qua C#, nhưng tôi không thể biết cài đặt hiệu ứng IsBodyHtml tới true có. Bất kể giá trị, bất cứ thứ gì tôi gửi trong phần Nội dung của tôi đều hiển thị với kiểu nội dung là "text/plain" và HTML của tôi hiển thị các thẻ và tất cả trong ứng dụng email của tôi (gmail). Lá cờ đó thực sự phải làm gì?MailMessage.IsBodyHtml làm gì?

LƯU Ý: Tôi có thể gửi email HTML tốt bằng cách tạo một AlternateView với loại nội dung "văn bản/html", tôi chỉ muốn hiểu cách thiết lập nội dung được cho là hoạt động.

Trả lời

17

Dưới đây là một đoạn trích cho helper SMTP của tôi, tôi sử dụng hàng ngày ....

public bool SendMail(string strTo, string strFrom, string strCc, string strBcc, string strBody, string strSubject) 
{ 

    bool isComplete = true; 

    SmtpClient smtpClient = new SmtpClient(); 
    MailMessage message = new MailMessage(); 

    try 
    { 
     //Default port will be 25 
     smtpClient.Port = 25; 

     message.From = new MailAddress(smtpEmailSource); 
     message.To.Add(strTo); 
     message.Subject = strSubject; 

     if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); } 
     if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); } 

     message.IsBodyHtml = true; 

     string html = strBody; //I usually use .HTML files with tags (e.g. {firstName}) I replace with content. This allows me to edit the emails in VS by opening a .HTML file and it's easy to do string replacements. 

     AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html")); 

     message.AlternateViews.Add(htmlView); 


     // Send SMTP mail 
     smtpClient.Send(message); 
    } 
    catch 
    { 
     isComplete = false; 
    } 

    return isComplete; 
} 

[UPDATE]

Các điểm chính như tôi ban đầu rời đi ...

  1. IsBodyHtml nói rằng thư của bạn được định dạng HTML. Nếu bạn chỉ gửi một lượt xem HTML, đây là tất cả những gì bạn cần. AlternateView được sử dụng để lưu trữ HTML của tôi, điều này là không cần thiết để gửi một tin nhắn HTML nhưng nó được yêu cầu nếu bạn muốn gửi một tin nhắn bao gồm HTML và Plain Text, trong trường hợp người nhận không thể hiển thị HTML.

Tôi lấy ra Plainview của tôi ở trên vì vậy đây là không rõ ràng, xin lỗi ...

Mấu chốt ở đây là nếu bạn muốn gửi một thông điệp được định dạng HTML bạn cần phải sử dụng IsBodyHtml = true (mặc định là sai) để nội dung của bạn được hiển thị dưới dạng HTML.

+0

Đó thực sự là những gì tôi làm. Tôi chỉ tò mò điều gì sẽ xảy ra nếu tôi gán HTML cho cơ thể với IsBodyHtml được đặt thành true thay vì sử dụng AlternateView. –

+0

Tôi giả sử thuộc tính Nội dung chỉ là một phím tắt cho 'AlternateView' và giữa' IsBodyHTML true/false' bạn đang chỉ định rằng 'Nội dung' là một trong hai văn bản thuần túy hoặc HTML. Nếu bạn muốn chỉ gửi một nội dung có định dạng RTF, bạn không thể sử dụng thuộc tính Nội dung, bạn phải tạo một lần xem thay thế để bạn có thể chỉ định loại nội dung cho RTF. –

15

Tôi vừa vật lộn với cùng một vấn đề này. Giải pháp tốt nhất của tôi là tránh thiết lập thuộc tính Body của đối tượng MailMessage. Thay vào đó, chỉ cần thêm hai AlternateView s, trước tiên là văn bản thuần túy, sau đó là HTML. Đảm bảo thêm phiên bản thuần văn bản trước vì tiêu chuẩn MIME cho biết:

Các định dạng được sắp xếp theo mức độ trung thành với bản gốc, ít trung thành nhất và trung thành nhất.

Điều đó có nghĩa là trước tiên bạn nên đặt phiên bản thuần văn bản để khách hàng nên sử dụng phiên bản HTML nếu có thể.

-2

IsBodyHtml - Chỉ định xem nội dung có chứa văn bản hoặc đánh dấu HTML hay không.

Nội dung chứa văn bản hoặc đánh dấu html cần được xác định bởi IsBodyHtml.