Czy istnieje lepszy sposób generowania wiadomości e-mail w formacie HTML w C # (do wysyłania za pośrednictwem System.Net.Mail) niż użycie Stringbuildera do wykonania następujących czynności:
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>");
i tak dalej i tak dalej?
Odpowiedzi:
Możesz użyć klasy MailDefinition .
Oto jak tego używasz:
Napisałem również post na blogu o tym, jak generować treść wiadomości e-mail w formacie HTML w C # przy użyciu szablonów wykorzystujących klasę MailDefinition .
źródło
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
dla każdej pary klucz / wartość ... w świetle tych szczegółów ta klasa nie zapewnia dużej wartości, jak użyto powyżej chyba że pracujesz z istniejącym odniesieniem doSystem.Web.UI.Controls
.Użyj klasy System.Web.UI.HtmlTextWriter.
W przypadku obszernego kodu HTML, który obejmuje tworzenie atrybutów stylu, prawdopodobnie najlepszym rozwiązaniem jest HtmlTextWriter. Jednak może to być trochę niezgrabne w użyciu, a niektórzy programiści lubią, aby sam znacznik był łatwy do odczytania, ale perwersyjne wybory HtmlTextWriter dotyczące wcięć są nieco dziwne.
W tym przykładzie możesz również dość skutecznie używać XmlTextWriter: -
źródło
h1
tagu?Zaktualizowana odpowiedź :
Dokumentacja
SmtpClient
klasy użytej w tej odpowiedzi brzmi teraz „Przestarzałe („ SmtpClient i jego sieć typów są źle zaprojektowane, zdecydowanie zalecamy użycie https://github.com/jstedfast/MailKit i https: // github .com / jstedfast / MimeKit zamiast ") '.Źródło: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Oryginalna odpowiedź :
Używanie klasy MailDefinition jest niewłaściwym podejściem. Tak, jest poręczny, ale jest również prymitywny i zależy od elementów sterujących interfejsu użytkownika sieci Web - to nie ma sensu w przypadku czegoś, co jest zwykle zadaniem po stronie serwera.
Przedstawione poniżej podejście jest oparte na dokumentacji MSDN i poście Qureshi na CodeProject.com .
UWAGA: Ten przykład wyodrębnia plik HTML, obrazy i załączniki z osadzonych zasobów, ale użycie innych alternatyw w celu uzyskania strumieni dla tych elementów jest w porządku, np. Zakodowane ciągi, pliki lokalne i tak dalej.
źródło
Używam dotLiquid właśnie do tego zadania.
Pobiera szablon i wypełnia specjalne identyfikatory treścią anonimowego obiektu.
Działa również z kolekcjami, zobacz kilka przykładów online .
źródło
Poleciłbym używanie jakiegoś rodzaju szablonów. Istnieje wiele różnych sposobów podejścia do tego problemu, ale zasadniczo należy przechowywać szablon wiadomości e-mail w jakimś miejscu (na dysku, w bazie danych itp.) I po prostu wstawić kluczowe dane (tj. Nazwa odbiorcy itp.) Do szablonu.
Jest to o wiele bardziej elastyczne, ponieważ oznacza, że możesz zmienić szablon zgodnie z wymaganiami bez konieczności zmiany kodu. Z mojego doświadczenia wynika, że prawdopodobnie otrzymasz prośby o zmiany w szablonach od użytkowników końcowych. Jeśli chcesz iść na całość, możesz dołączyć edytor szablonów.
źródło
Jako alternatywę dla MailDefinition, spójrz na RazorEngine https://github.com/Antaris/RazorEngine .
To wygląda na lepsze rozwiązanie.
Przypisywane ...
jak wysłać wiadomość e-mail z szablonem wiadomości e-mail c #
Na przykład
Które wyjścia ...
źródło
Emitowanie ręcznie utworzonego kodu HTML w ten sposób jest prawdopodobnie najlepszym sposobem, o ile znaczniki nie są zbyt skomplikowane. Program budujący ciągi zaczyna zwracać się w kategoriach wydajności dopiero po około trzech połączeniach, więc dla naprawdę prostych rzeczy wystarczy ciąg + ciąg.
Poza tym możesz zacząć używać kontrolek html (System.Web.UI.HtmlControls) i renderować je, w ten sposób czasami możesz je dziedziczyć i tworzyć własne klasy dla złożonego układu warunkowego.
źródło
Możesz rzucić okiem na niektóre z dostępnych obecnie struktur szablonów. Niektóre z nich powstały w wyniku MVC, ale nie jest to wymagane. Spark jest dobry.
źródło
Jeśli nie chcesz zależności od pełnego .NET Framework, istnieje również biblioteka, która sprawia, że Twój kod wygląda następująco:
Jest to open source, możesz go pobrać z http://sourceforge.net/projects/htmlplusplus/
Zastrzeżenie: Jestem autorem tej biblioteki, została napisana, aby dokładnie rozwiązać ten sam problem - wysłać e-mail w formacie HTML z aplikacji.
źródło
Wersja komercyjna, której używam na produkcji i pozwala na łatwą konserwację, to LimiLabs Template Engine , używam go od ponad 3 lat i pozwala mi na dokonywanie zmian w szablonie tekstowym bez konieczności aktualizacji kodu (zastrzeżenia, linki itp.) - to może być tak proste, jak
Warto się temu przyjrzeć, tak jak ja; po wypróbowaniu różnych odpowiedzi wymienionych tutaj.
źródło