2009-08-25 71 views
39

Làm cách nào để gửi email HTML? Tôi sử dụng mã trong this answer để gửi email với SmtpClient nhưng chúng luôn là văn bản thuần túy, do đó liên kết trong thông báo mẫu bên dưới không được định dạng như vậy.Gửi email HTML qua C# với SmtpClient

<p>Welcome to SiteName. To activate your account, visit this URL: <a href="http://SiteName.com/a?key=1234">http://SiteName.com/a?key=1234</a>.</p> 

Làm cách nào để bật HTML trong thư e-mail tôi gửi?

+1

ropstah: TBH tôi đã nhầm lẫn và đã viết trong một trong các ý kiến ​​của bạn rằng không có IsBodyHtml trong SmtpClient. Josiah là người đã chỉ cho tôi làm điều đó với MailMessage. –

Trả lời

8

Áp dụng mã hóa chính xác của Thư.

mail.IsBodyHtml = true; 
18

Tôi tin rằng đó là một cái gì đó như:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH tôi đã nhầm lẫn và đã viết trong một trong hai ý kiến ​​rằng không có IsBodyHtml trong SmtpClient. Josiah là người đã chỉ cho tôi làm điều đó với MailMessage. –

81

Đây là những gì tôi làm:

MailMessage mail = new MailMessage(from, to, subject, message); 
mail.IsBodyHtml = true; 
SmtpClient client = new SmtpClient("localhost"); 
client.Send(mail); 

Lưu ý rằng tôi đặt html nhắn mail cho đúng: mail.IsBodyHtml = true;

+5

Đáng chú ý rằng cả hai 'MailMessage' và' SmtpClient' thực hiện 'IDisposable', và cần phải được xử lý phù hợp. – djs

1

tôi có ý tưởng, bạn có thể thêm hộp kiểm vào dự án của mình để gửi email dưới dạng html dưới dạng tùy chọn cho người dùng và thêm mã này để bật tùy chọn này:

  MailMessage mail = new MailMessage(from, to, subject, message); 

     if(checkBox1.CheckState == CheckState.Checked) 
      { 
       mail.IsBodyHtml = true; 
      } 

     SmtpClient client = new SmtpClient("localhost"); 

     client.Send(mail); 
13

IsBodyHtml = true chắc chắn là phần quan trọng nhất.

Nhưng nếu bạn muốn cung cấp một email với cả một văn bản/phần đồng bằng và một phần text/html gồm như dự khuyết, nó cũng có thể sử dụng các lớp AlternateView:

MailMessage msg = new MailMessage(); 
AlternateView plainView = AlternateView 
    .CreateAlternateViewFromString("Some plaintext", Encoding.UTF8, "text/plain"); 
// We have something to show in real old mail clients. 
msg.AlternateViews.Add(plainView); 
string htmlText = "The <b>fancy</b> part."; 
AlternateView htmlView = 
    AlternateView.CreateAlternateViewFromString(htmlText, Encoding.UTF8, "text/html"); 
msg.AlternateViews.Add(htmlView); // And a html attachment to make sure. 
msg.Body = htmlText; // But the basis is the html body 
msg.IsBodyHtml = true; // But the basis is the html body 
+0

'AlternateView' cho' htmlView' có thực sự cần thiết không? Vì bạn đã đặt nội dung thành 'htmlText'. Không phải là nó dư thừa để thiết lập nó một lần nữa là xem thay thế? –

+1

Không chỉ cần thiết, mà còn quan trọng là nó được thêm vào sau chế độ xem thay thế đơn giản. xem http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-instead-html. Nhưng việc chỉ định Body và IsBodyHtml là không cần thiết nếu bạn đã thêm chế độ xem thay thế html. – FunkyOne

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