Парсинг сообщений в формате обычного текста из содержимого HTML (ASP.NET) - PullRequest
1 голос
/ 10 ноября 2008

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

Исходя из этого, мы должны иметь возможность получить альтернативный текст для электронной почты. Я думал о том, чтобы мгновенно перейти к созданию RegEx и удалить теги <*> из сообщения. Но потом я понял, что это было бы бесполезно, поскольку нам нужна некоторая информация о форматировании (абзацы, разрывы строк, изображения и т.д.).

ПРИМЕЧАНИЕ: Я согласен с отправкой почты и настройкой альтернативных представлений и т. Д., Это только при получении открытого текста из HTML.

Итак, я размышляю над некоторыми идеями. Опубликуйте один как ответ, чтобы увидеть, что вы, ребята, думаете, но думал, что я открою это до пола. :)

Если вам нужно больше разъяснений, пожалуйста, кричите.

Большое спасибо,

Rob

Ответы [ 3 ]

1 голос
/ 10 ноября 2008

Мое решение

ОК, вот оно! Я придумал решение своей проблемы, и оно работает как шарм!

Теперь вот некоторые цели, которые я хотел поставить:

  • Весь контент для электронных писем должен оставаться на страницах ASPX (как и в настоящий момент HTML-контент).
  • Я не хотел, чтобы код клиента делал что-то большее, чем сказать "SendMail("PageX.aspx")".
  • Я не хотел писать слишком много кода.
  • Я хотел, чтобы код был максимально семантически правильным (нет ДЕЙСТВИТЕЛЬНО сумасшедших хаков!).

Процесс

Итак, вот что я в итоге сделал:

  • Перейти на главную страницу для сообщений электронной почты. Создайте ASP.NET MultiView Control . Этот элемент управления будет иметь два представления - HTML и PlainText.
  • В каждом представлении я добавлял заполнители содержимого для фактического содержимого.
  • Затем я взял весь существующий код ASPX (например, верхний и нижний колонтитулы) и вставил его в представление HTML. Все это, DocType и все. Это заставляет VS немного подергивать. Игнорировать.
  • Затем я, конечно, добавил новый контент в представление PlainText, чтобы лучше всего воспроизвести представление HTML в среде PlainText.
  • Затем я добавил некоторый код в Master Page_Load, проверяя параметр QueryString «тип», который может быть либо «html», либо «text». Это падает на «текст», если его нет. В зависимости от значения, оно переключает вид.
  • Затем я перехожу на страницы содержимого и добавляю новые заполнители для эквивалентов PlainText и добавляю текст по мере необходимости.
  • Чтобы сделать мою жизнь проще, я затем перегрузил свой метод SendMail, чтобы получить ответ для требуемой страницы, передав "type=html" и "type=text" и создав AlternateView как необходимо.

В итоге

Итак, вкратце:

  • Представления разделяют фактические «представления» содержимого (HTML и Text).
  • Главная страница автоматически переключает представление на основе QueryString.
  • Содержательные страницы отвечают за то, как выглядят их представления.

Работа выполнена!

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

0 голосов
/ 10 ноября 2008

Вы можете убедиться, что HTML-почта имеет формат XHTML, поэтому вы можете легко ее проанализировать с помощью стандартных инструментов XML, а затем создать собственный сериализатор DOM, который выводит простой текст. Было бы много работы, чтобы охватить общий XHTML, но для ограниченного подмножества, которое вы планируете использовать в электронной почте, это может сработать.

В качестве альтернативы, если вы не против отправки в другую программу, вы можете просто использовать ключ -dump в веб-браузере lynx.

0 голосов
/ 10 ноября 2008

Моя идея

Создание страницы на основе содержимого HTML и обход дерева управления. Затем вы можете выбрать текст из элементов управления и обрабатывать различные элементы управления по мере необходимости (например, использовать текст ALT для изображений, «_____» для HR и т. Д.).

...