Есть ли лучший способ сгенерировать электронную почту HTML на C # (для отправки через System.Net.Mail), чем использовать Stringbuilder для выполнения следующих действий:
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>");
и так далее и тому подобное?
Ответы:
Вы можете использовать класс MailDefinition .
Вот как вы его используете:
Кроме того, я написал сообщение в блоге о том, как сгенерировать тело сообщения электронной почты в формате HTML на C # с использованием шаблонов с использованием класса MailDefinition .
источник
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
для каждой пары ключ / значение ... в свете этой детали этот класс не имеет большого значения, как использовалось выше если не работаете с существующей ссылкой наSystem.Web.UI.Controls
.Используйте класс System.Web.UI.HtmlTextWriter.
Для расширенного HTML, который включает создание атрибутов стиля, HtmlTextWriter, вероятно, лучший способ. Однако это может быть немного неуклюже в использовании, и некоторым разработчикам нравится, чтобы сама разметка была легко читаемой, но извращенный выбор HtmlTextWriter в отношении отступов немного странный.
В этом примере вы также можете довольно эффективно использовать XmlTextWriter: -
источник
h1
тегу?Обновленный ответ :
В документации для
SmtpClient
класса, использованного в этом ответе, теперь говорится: «Устаревший» («SmtpClient и его сеть типов плохо спроектированы, мы настоятельно рекомендуем вам использовать https://github.com/jstedfast/MailKit и https: // github .com / jstedfast / MimeKit вместо ")".Источник: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Оригинальный ответ :
Использование класса MailDefinition - неправильный подход. Да, это удобно, но это также примитивно и зависит от элементов управления веб-интерфейсом - это не имеет смысла для того, что обычно является задачей на стороне сервера.
Представленный ниже подход основан на документации MSDN и публикации Куреши на CodeProject.com .
ПРИМЕЧАНИЕ. В этом примере файл HTML, изображения и вложения извлекаются из встроенных ресурсов, но можно использовать другие альтернативы для получения потоков для этих элементов, например жестко заданные строки, локальные файлы и т. Д.
источник
Я использую dotLiquid именно для этой задачи.
Он берет шаблон и заполняет специальные идентификаторы содержимым анонимного объекта.
Он также работает с коллекциями, см. Некоторые онлайн-примеры .
источник
Я бы рекомендовал использовать какие-то шаблоны. Есть несколько разных способов подойти к этому, но по сути держать шаблон электронного письма где-нибудь (на диске, в базе данных и т. Д.) И просто вставлять ключевые данные (IE: имя получателя и т. Д.) В шаблон.
Это гораздо более гибкий подход, поскольку он означает, что вы можете изменять шаблон по мере необходимости, не изменяя код. По моему опыту, вы, вероятно, получите запросы на изменение шаблонов от конечных пользователей. Если вы хотите сделать все возможное, вы можете включить редактор шаблонов.
источник
В качестве альтернативы MailDefinition взгляните на RazorEngine https://github.com/Antaris/RazorEngine .
Похоже, это лучшее решение.
Приписывается ...
как отправить электронное письмо с шаблоном электронной почты С #
Например
Какие выходы ...
источник
Создание подобного HTML вручную, вероятно, лучший способ, если разметка не слишком сложна. Конструктор строк начинает окупаться с точки зрения эффективности только после трех конкатенаций, так что для действительно простых вещей подойдет строка + строка.
Помимо этого, вы можете начать использовать элементы управления html (System.Web.UI.HtmlControls) и отображать их, таким образом вы можете иногда наследовать их и создавать свои собственные классы для сложной условной компоновки.
источник
Возможно, вы захотите взглянуть на некоторые из доступных на данный момент фреймворков шаблонов. Некоторые из них являются побочными продуктами в результате MVC, но это не обязательно. Спарк хороший.
источник
Если вам не нужна зависимость от полной .NET Framework, есть также библиотека, которая заставляет ваш код выглядеть так:
Это открытый исходный код, вы можете скачать его с http://sourceforge.net/projects/htmlplusplus/
Отказ от ответственности: я являюсь автором этой библиотеки, она была написана для решения той же проблемы - отправки электронного письма в формате HTML из приложения.
источник
Коммерческая версия, которую я использую в производстве и которая упрощает обслуживание, - это движок шаблонов LimiLabs , использующий его более 3 лет и позволяющий мне вносить изменения в текстовый шаблон без необходимости обновлять код (заявления об отказе, ссылки и т. Д.) - это может быть так просто, как
Стоит взглянуть, как и я; после попытки различных ответов, упомянутых здесь.
источник