Apakah ada cara yang lebih baik untuk menghasilkan email HTML di C # (untuk dikirim melalui System.Net.Mail), daripada menggunakan Stringbuilder untuk melakukan hal berikut:
string userName = "John Doe";
StringBuilder mailBody = new StringBuilder();
mailBody.AppendFormat("<h1>Heading Here</h1>");
mailBody.AppendFormat("Dear {0}," userName);
mailBody.AppendFormat("<br />");
mailBody.AppendFormat("<p>First part of the email body goes here</p>");
dan sebagainya, dan lain sebagainya?
Jawaban:
Anda dapat menggunakan kelas MailDefinition .
Inilah cara Anda menggunakannya:
Selain itu, saya telah menulis posting blog tentang cara menghasilkan badan email HTML di C # menggunakan template menggunakan kelas MailDefinition .
sumber
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
untuk setiap pasangan kunci / nilai ... mengingat detail itu, kelas ini tidak memberikan banyak nilai seperti yang digunakan di atas kecuali bekerja dengan referensi yang ada keSystem.Web.UI.Controls
.Gunakan kelas System.Web.UI.HtmlTextWriter.
Untuk HTML ekstensif yang menyertakan pembuatan atribut gaya, HtmlTextWriter mungkin adalah cara terbaik untuk melakukannya. Namun ini bisa sedikit kikuk untuk digunakan dan beberapa pengembang menyukai markup itu sendiri agar mudah dibaca tetapi pilihan HtmlTextWriters yang menyimpang terkait indentasi agak aneh.
Dalam contoh ini Anda juga dapat menggunakan XmlTextWriter dengan cukup efektif: -
sumber
h1
tag?Jawaban yang Diperbarui :
Dokumentasi untuk
SmtpClient
, kelas yang digunakan dalam jawaban ini, sekarang berbunyi, 'Usang ("SmtpClient dan jenis jaringannya dirancang dengan buruk, kami sangat menyarankan Anda menggunakan https://github.com/jstedfast/MailKit dan https: // github .com / jstedfast / MimeKit sebagai gantinya ") '.Sumber: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Jawaban Asli :
Menggunakan kelas MailDefinition adalah pendekatan yang salah. Ya, ini berguna, tetapi juga primitif dan bergantung pada kontrol UI web - itu tidak masuk akal untuk sesuatu yang biasanya merupakan tugas sisi server.
Pendekatan yang disajikan di bawah ini didasarkan pada dokumentasi MSDN dan posting Qureshi di CodeProject.com .
CATATAN: Contoh ini mengekstrak file HTML, gambar, dan lampiran dari sumber daya yang disematkan, tetapi menggunakan alternatif lain untuk mendapatkan aliran untuk elemen-elemen ini baik-baik saja, misalnya string berkode keras, file lokal, dan sebagainya.
sumber
Saya menggunakan dotLiquid untuk tugas ini.
Dibutuhkan templat, dan mengisi pengenal khusus dengan konten objek anonim.
Ini juga berfungsi dengan koleksi, lihat beberapa contoh online .
sumber
Saya akan merekomendasikan menggunakan template atau semacamnya. Ada berbagai cara berbeda untuk melakukan pendekatan ini, tetapi pada dasarnya pegang template Email di suatu tempat (di disk, di database, dll.) Dan cukup masukkan data kunci (Yaitu: Nama penerima, dll.) Ke dalam template.
Ini jauh lebih fleksibel karena artinya Anda dapat mengubah template sesuai kebutuhan tanpa harus mengubah kode Anda. Dalam pengalaman saya, Anda cenderung mendapatkan permintaan untuk perubahan template dari pengguna akhir. Jika Anda ingin bekerja keras, Anda bisa menyertakan editor template.
sumber
Sebagai alternatif dari MailDefinition, lihat RazorEngine https://github.com/Antaris/RazorEngine .
Sepertinya ini solusi yang lebih baik.
Diatribusikan ke ...
cara mengirim email dengan template email c #
Misalnya
Output mana ...
sumber
Memancarkan html buatan tangan seperti ini mungkin merupakan cara terbaik selama markup tidak terlalu rumit. Pembuat string hanya mulai membayar Anda kembali dalam hal efisiensi setelah sekitar tiga penggabungan, jadi untuk hal-hal yang sangat sederhana string + string akan dilakukan.
Selain itu, Anda dapat mulai menggunakan kontrol html (System.Web.UI.HtmlControls) dan merendernya, dengan begitu Anda terkadang dapat mewarisinya dan membuat clasess Anda sendiri untuk tata letak bersyarat yang kompleks.
sumber
Anda mungkin ingin melihat beberapa kerangka kerangka yang tersedia saat ini. Beberapa dari mereka adalah spin off sebagai hasil dari MVC tetapi itu tidak diperlukan. Spark itu bagus.
sumber
Jika Anda tidak ingin ketergantungan pada .NET Framework penuh, ada juga pustaka yang membuat kode Anda terlihat seperti:
Ini open source, Anda dapat mendownloadnya dari http://sourceforge.net/projects/htmlplusplus/
Penafian: Saya adalah pembuat pustaka ini, ini ditulis untuk menyelesaikan masalah yang sama persis - mengirim email HTML dari aplikasi.
sumber
Versi komersial yang saya gunakan dalam produksi dan memungkinkan perawatan yang mudah adalah LimiLabs Template Engine , telah menggunakannya selama 3+ tahun dan memungkinkan saya untuk membuat perubahan pada template teks tanpa harus memperbarui kode (penafian, tautan, dll ..) - itu bisa sesederhana
Layak untuk dilihat, seperti yang saya lakukan; setelah mencoba berbagai jawaban yang disebutkan di sini.
sumber