Я могу настроить Шаблоны HTML/электронной почты с ASP.NET?

Для начала проверьте AWS CloudFormation . Вы будете создавать шаблоны для проектирования работы инфраструктуры вашего приложения - инфраструктуры как кода. С помощью этих шаблонов вы можете развернуть обновление вашей инфраструктуры, передав изменения в ваши шаблоны и / или код приложения.

В моем текущем проекте у нас есть хранилище github, предназначенное для этих шаблонов инфраструктуры, и отдельное хранилище для кода нашего приложения. Создайте конвейер для создания ресурсов AWS, который будет развертывать обновленные до AWS каждый раз, когда вы отправляете в хранилище в определенной ветке.

  • Создайте конвейер инфраструктуры.
  • создайте свой первый этап конвейера, чтобы запускать сборку всякий раз, когда в шаблонах инфраструктуры появляются изменения кода. См. AWS CodePipeline , а также см. AWS CodeBuild . Это не единственные ресурсы AWS, которые вам понадобятся, но они, вероятно, являются основными, конечно, за исключением того, что делается в шаблоне облачной информации, как упоминалось ранее.

как я буду каждый раз развертывать код на динамически генерируемых экземплярах?

blockquote>
  • Проверьте, как работает containers, было бы лучше и будет очень дополнение к тому, как вы узнаете, как работает новая версия приложения. Для начала см. docker , но не стесняйтесь проверять любые ресурсы в вашем распоряжении
  • Продолжение моего текущего проекта: у нас есть отдельный конвейер, выделенный для нашего приложения, но он также будет запущен после обновления нашей инфраструктуры. Наш конвейер приложений предназначен для создания новой версии нашего приложения через AWS Codebuild, это создаст image, который станет контейнером ~ из документации докера.
  • у нас есть два триггера или два источника, которые будут запускать развертывание обновлений в нашем конвейере приложений, один - когда происходят изменения в конвейере инфраструктуры, и он успешно собран, и второй - когда происходят изменения в нашем репозитории github, подключенном через AWS CodeBuild.
  • Проверьте AWS AutoScaling , в этих областях описывается динамический запуск новых экземпляров, выключение экземпляров при необходимости, замена нездоровых экземпляров при необходимости. См. Также AWS CloudWatch , с его помощью вы можете разработать критерии для запуска масштабирования вниз / вверх и / или входа / выхода.

Будет ли aws копировать весь экземпляр, назначать ему новый ip и порождать его как новый экземпляр, или мне придется написать некоторый код для автоматизации этого процесса?

blockquote>
  • См. AWS ElasticLoadBalancing , а также ознакомьтесь с дополнительной информацией об AWS AutoScaling. В процессе автоматизации, если вы когда-нибудь будете использовать CloudFormation, экземпляры и / или контейнеры (в зависимости от вашего дизайна) будут управляться изящно.

Плюс, не будет ли непростой задачей извлекать код из git и развертывать каждый раз, когда создается новый экземпляр?

blockquote>
  • Как уже упоминалось, ранее имея конвейер для развертывания новых версий вашего приложения через CodeBuild, это создаст образ с новыми изменениями кода, а когда все будет готово, он будет развернут ~ становится контейнером. Старый экземпляр EC2 или старый контейнер (в зависимости от того, как вы хотите, чтобы ваше приложение было развернуто) будут корректно закрыты после запуска и запуска новой версии вашего приложения. Это даст вам нулевое время простоя.
  • [1 125]

94
задан John Saunders 15 April 2010 в 13:39
поделиться

18 ответов

Установите набор Электронное письмо, IsBodyHtml = верный

Берут Ваш объект, который содержит Ваше почтовое содержание, Сериализируют объект и используют xml/xslt для генерации содержимого HTML.

, Если Вы хотите сделать, AlternateViews делают то же самое, что jmein только используют другой шаблон xslt для создания содержания простого текста.

одно из главных преимуществ для этого - то, если Вы хотите изменить свое расположение все, что необходимо сделать, обновляют шаблон xslt.

0
ответ дан Bob The Janitor 24 November 2019 в 06:03
поделиться

Если Вы в состоянии позволить ASPNET и связанному пользовательскому разрешению считать & запишите файл, можно легко использовать файл HTML со стандартом String.Format() заполнители ({0}, {1:C}, и т.д.) для выполнения этого.

Просто считанный в файле, как строка, с помощью классов от System.IO пространство имен. Как только Вы имеете ту строку, передаете ее как первый аргумент String.Format() и обеспечиваете параметры.

Имеют в наличии ту строку и используют его в качестве тела электронной почты, и Вы по существу сделаны. Мы делаем это на десятках (по общему признанию небольших) сайтов сегодня и не имели никаких проблем.

я должен отметить, что это работает лучше всего если (a) Вы не посылаете огромное количество электронных писем за один раз, (b) Вы не персонализировали каждую электронную почту (иначе, Вы съедаете выше на тонну строк), и (c) сам файл HTML является относительно маленьким.

0
ответ дан John Rudy 24 November 2019 в 06:03
поделиться

, Что было бы идеально, что должным быть использовать.ASPX страницу в качестве шаблона так или иначе, тогда просто, скажите моему коду служить той странице и использовать HTML, возвращенный для электронной почты.

Вы могли легко просто создать WebRequest, чтобы поразить страницу ASPX и получить результирующий HTML. С немного большим количеством работы можно было, вероятно, обойтись без него WebRequest. PageParser и Ответ. Фильтр позволил бы Вам выполнять страницу и получать вывод..., хотя могут быть некоторые более изящные пути.

1
ответ дан Mark Brackett 24 November 2019 в 06:03
поделиться

Уверенный можно создать шаблон HTML, и я рекомендовал бы также текстовый шаблон. В шаблоне можно просто поместить [ТЕЛО] в место, куда тело было бы помещено, и затем можно просто читать в шаблоне и заменить тело новым содержанием. Можно послать электронное письмо с помощью.Nets Почтовый Класс. Просто необходимо циклично выполниться посредством отправки электронной почты всем получателям после создания электронной почты первоначально. Обработанный как очарование для меня.

using System.Net.Mail;

// Email content
string HTMLTemplatePath = @"path";
string TextTemplatePath = @"path";
string HTMLBody = "";
string TextBody = "";

HTMLBody = File.ReadAllText(HTMLTemplatePath);
TextBody = File.ReadAllText(TextTemplatePath);

HTMLBody = HTMLBody.Replace(["[BODY]", content);
TextBody = HTMLBody.Replace(["[BODY]", content);

// Create email code
MailMessage m = new MailMessage();

m.From = new MailAddress("address@gmail.com", "display name");
m.To.Add("address@gmail.com");
m.Subject = "subject";

AlternateView plain = AlternateView.CreateAlternateViewFromString(_EmailBody + text, new System.Net.Mime.ContentType("text/plain"));
AlternateView html = AlternateView.CreateAlternateViewFromString(_EmailBody + body, new System.Net.Mime.ContentType("text/html"));
mail.AlternateViews.Add(plain);
mail.AlternateViews.Add(html);

SmtpClient smtp = new SmtpClient("server");
smtp.Send(m);
4
ответ дан Josh Mein 24 November 2019 в 06:03
поделиться

Если Вы хотите передать параметры как имена пользователей, названия продукта... и т.д. можно использовать движок шаблонов с открытым исходным кодом NVelocity для создания заключительной электронной почты / HTML.

пример шаблона NVelocity ( MailTemplate.vm):

A sample email template by <b>$name</b>.
<br />

Foreach example :
<br />    
#foreach ($item in $itemList)

[Date: $item.Date] Name: $item.Name, Value: $itemValue.Value
<br /><br />

#end

Генерирующее почтовое тело MailTemplate.vm в Вашем приложении:

VelocityContext context = new VelocityContext();
context.Put("name", "ScarletGarden");
context.Put("itemList", itemList);

StringWriter writer = new StringWriter();

Velocity.MergeTemplate("MailTemplate.vm", context, writer);

string mailBody = writer.GetStringBuilder().ToString();

почтовое тело результата:

демонстрационный почтовый шаблон А [1 117] ScarletGarden.

пример Foreach:

[Дата: 02.12.2009] Имя: Объект 1, Значение: 09

[Дата: 21.02.2009] Имя: Объект 4, Значение: 52

[Дата: 03.01.2009] Имя: Объект 2, Значение: 21

[Дата: 23.03.2009] Имя: Объект 6, Значение: 24

Для редактирования шаблонов, возможно, можно использовать FCKEditor и сохранить шаблоны в файлы.

18
ответ дан Canavar 24 November 2019 в 06:03
поделиться

Вы могли попробовать класс

MailDefinition
35
ответ дан JProgrammer 24 November 2019 в 06:03
поделиться

Вы могли бы также хотеть попытаться загрузить управление, и затем представить его к строке и установить это как ТЕЛО HTML:

// Declare stringbuilder to render control to
StringBuilder sb = new StringBuilder();

// Load the control
UserControl ctrl = (UserControl) LoadControl("~/Controls/UserControl.ascx");

// Do stuff with ctrl here

// Render the control into the stringbuilder
StringWriter sw = new StringWriter(sb);
Html32TextWriter htw = new Html32TextWriter(sw);
ctrl.RenderControl(htw);

// Get full body text
string body = sb.ToString();

Вы могли тогда создать свою электронную почту, как обычно:

MailMessage message = new MailMessage();
message.From = new MailAddress("from@email.com", "from name");
message.Subject = "Email Subject";
message.Body = body;
message.BodyEncoding = Encoding.ASCII;
message.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient("server");
smtp.Send(message);

Вы пользовательский элемент управления мог содержать другие средства управления, такие как заголовок и нижний колонтитул, и также использовать в своих интересах функциональность, такую как привязка данных.

55
ответ дан Mun 24 November 2019 в 06:03
поделиться

Я думаю, что Вы могли также сделать что-то вроде этого:

Создайте и .aspx страница, и поместите это в конце метода OnLoad или назовите его вручную.

    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    HtmlTextWriter htmlTW = new HtmlTextWriter(sw);
    this.Render(htmlTW);

Я не уверен, существуют ли какие-либо потенциальные проблемы с этим, но похоже, что это работало бы. Таким образом, Вы могли использовать полнофункциональную .aspx страницу вместо класса MailDefinition, который только поддерживает текстовые замены.

5
ответ дан John Bubriski 24 November 2019 в 06:03
поделиться

Будьте осторожны при выполнении этого, Спам-фильтры, кажется, блокируются, ASP.net генерировал HTML, по-видимому, из-за ViewState, поэтому если Вы собираетесь сделать, это удостоверяется, что произведенный HTML является чистым.

Я лично изучил бы использование Asp.net MVC для достижения желаемых результатов. или NVelocity довольно хорош в этом

2
ответ дан danswain 24 November 2019 в 06:03
поделиться

Если гибкость является одной из Ваших предпосылок, XSLT мог бы быть хорошим выбором, который полностью поддерживается платформой.NET, и Вы смогли бы даже позволить пользователю отредактировать те файлы. Эта статья (http://www.aspfree.com/c/a/XML/XSL-Transformations-using-ASP-NET/) могла бы быть полезна для запуска (MSDN имеет больше информации об этом). Как сказано ScarletGarden NVelocity другой хороший выбор, но я действительно предпочитаю XSLT для его "встроенной" поддержки платформы.NET и агностика платформы.

6
ответ дан Everton 24 November 2019 в 06:03
поделиться

у меня было подобное требование к 1 из проектов, куда необходимо было отправить огромное количество электронных писем каждый день, и клиент хотел полный контроль над шаблонами HTML для различных типов электронных писем.

из-за большого количества электронных писем, которые будут отправлены, производительность была первоочередной задачей.

то, что мы придумали, было статическим содержанием в SQL-сервере, где Вы копите всю метку шаблона HTML (наряду с заполнителями, как [UserFirstName], [UserLastName], которые заменяются реальными данными во время выполнения) для различных типов электронных писем

затем мы загрузили эти данные в кэше asp.net - таким образом, мы не читаем шаблоны HTML много раз - но только когда они на самом деле изменяются

мы дали клиенту WYSIWYG-редактор для изменения этих шаблонов с помощью администраторской веб-формы. каждый раз, когда обновления были сделаны, мы сбрасываем кэш asp.net.

и затем у нас была отдельная таблица для почтовых журналов - где каждая электронная почта, которая будет отправлена, была зарегистрирована. эта таблица имела поля, названные emailType, emailSent и numberOfTries.

мы просто работали, задание каждые 5 минут для важных типов электронной почты (как новый участник подписываются, забыл пароль), который должен быть отправлен как можно скорее

мы выполняли другое задание каждые 15 минут для менее важных типов электронной почты (как электронная почта продвижения, электронная почта новостей, и т.д.)

этим путем Вы не блокируетесь, Ваша отправка сервера не останавливают электронные письма, и Вы обрабатываете письма в пакете. после того как электронное письмо послано Вы, устанавливает emailSent поле на 1.

1
ответ дан Raj 24 November 2019 в 06:03
поделиться

Мне нравится ответ Власти. Программы как ListManager и платформы как DNN делают подобные вещи, и если легкое редактирование нетехническими пользователями требуется, WYSIWYG-редакторы для изменения HTML, сохраненного в SQL, главным образом легкий, простой способ пойти и может легко разместить заголовки редактирования независимо от нижних колонтитулов, и т.д., а также использования маркеров для динамичной вставки значений.

Одна вещь иметь в виду при использовании вышеупомянутого метода (или любой, действительно) состоит в том, чтобы быть строгой и осторожной, о которых типах моделирования и тегов Вы позволяете редакторам вставлять. Если Вы думаете, что браузеры являются привередливыми, просто ожидают, пока Вы не видите, как по-другому почтовые клиенты представляют то же самое...

0
ответ дан Nick 24 November 2019 в 06:03
поделиться

Взгляд на SubSonic (www.subsonicproject.com). Они делают точно это, чтобы сгенерировать код - шаблон является стандартным ASPX, и он производит c#. Тот же метод был бы допускающим повторное использование для Вашего сценария.

0
ответ дан jvenema 24 November 2019 в 06:03
поделиться

Я пользовался бы библиотекой шаблонной обработки как TemplateMachine., который это позволяет, Вы главным образом помещаете свой почтовый шаблон вместе с обычным текстом и затем используете правила ввести/заменить значения по мере необходимости. Очень похожий на ERB в Ruby. Это позволяет Вам разделять поколение почтового содержания, не связывая Вас слишком в большой степени с чем-то как ASPX и т.д. затем, после того как содержание сгенерировано с этим, можно послать по электронной почте далеко.

0
ответ дан MikeJ 24 November 2019 в 06:03
поделиться

Вот еще одна альтернатива который использует преобразования XSL для более сложных шаблонов электронной почты: Отправка электронной почты на основе HTML из приложений .NET .

4
ответ дан 24 November 2019 в 06:03
поделиться

Обратите внимание, что решения aspx и ascx требуют текущего HttpContext, поэтому их нельзя использовать асинхронно (например, в потоках) без большой работы.

1
ответ дан 24 November 2019 в 06:03
поделиться

Аналогична ответом Канавара, но вместо того, что я всегда использую « StringTemplate » которые я загружаю шаблон из файла конфигурации, или загрузите внешний файл, используя файл.readallText () и установить значения.

Это проект Java, но порт C # твердый, и я использовал его в нескольких проектах (просто использовал его для шаблона электронной почты с помощью шаблона в внешнем файле).

Альтернативы всегда хороши.

0
ответ дан 24 November 2019 в 06:03
поделиться

Компонент электронной почты Mail.dll включает механизм шаблонов электронной почты:

Вот обзор синтаксиса:

<html>
<body>
Hi {FirstName} {LastName},

Here are your orders: 
{foreach Orders}
    Order '{Name}' sent to <strong>{Street}</strong>. 
{end}

</body>
</html>

И код, который загружает шаблон, заполняет данные из объекта C # и отправляет электронное письмо:

Mail.Html(Template
              .FromFile("template.txt")
              .DataFrom(_contact)
              .Render())
    .Text("This is text version of the message.")
    .From(new MailBox("alice@mail.com", "Alice"))
    .To(new MailBox("bob@mail.com", "Bob"))
    .Subject("Your order")
    .UsingNewSmtp()
    .WithCredentials("alice@mail.com", "password")
    .Server("mail.com")
    .WithSSL()
    .Send();

Вы можете получить дополнительную информацию в блоге механизм шаблонов электронной почты .

Или просто скачайте почтовый компонент Mail.dll и попробуйте.

Обратите внимание, что это коммерческий продукт, который я создал.

7
ответ дан 24 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: