Введение
Email-рассылки, отправляемые через Печкин, в большинстве своем содержат как html-версию письма, так и plain-text версию. Отправить рассылку без HTML-версии можно, а вот, отправив ее без plain-text, вы рискуете лишиться ряда подписчиков, почтовые клиенты которых без сожаления вырезают html-версии писем в целях безопасности. Особенно этим отличаются корпоративные аккаунты, почтовые администраторы которых заботятся о защите своих подопечных от спама и вирусов.
Ставим задачу
Итак, plain-text версия письма необходима, это факт. Но как же сложно заставить себя написать ее, если вы только что потратили кучу времени на создание html-версии своей рассылки. Очевидно, что Печкин должен снимать эту нагрузку и автоматически генерировать текстовую версию писем для наших клиентов. Но как это сделать?
Мы перепробовали многое:
- разнообразные регулярные выражения
- кучу разных библиотек для парсинга html
Все было криво и невпопад, класс для генерации увеличивался на глазах, а косяки шли за косяками. А ведь нам требовалось просто и красивое решение, которое позволяло бы:
- выделять заголовки и подзаголовки
- выделять и аккуратно отображать ссылки
- следить за количеством переносов и аккуратно распологать блоки с текстом для их читаемости
- делать все это быстро
Решение на lynx
И тут, неожиданно для нас, всплыло решение с помощью технологии из 90-х годов прошлого века, появившейся на заре возникнования интернета. Текстовый браузер! Ну, конечно, скармливаем ему наш html-код и на выходе получаем его превосходно отображаемую текстовую версию, со всеми ссылками, заголовками итд. За базу был взят Lynx, работает он быстро, да и один из наших разработчиков использовал его ранее для своих SEO-целей.
Пришлось немного поднастроить его для восприятия русского языка в наших рассылках. Настройки в lynx.cfg на Debian (кодировка всех рассылок на Печкине — UTF-8):
LOCALE_CHARSET:FALSE
ASSUME_CHARSET:utf-8
CHARACTER_SET:utf-8
MAKE_PSEUDO_ALTS_FOR_INLINES:FALSE
И, вуаля, с помощью простой команды:
lynx -dump
получаем красивую текстовую версию письма.
В результате, вместо массивного класса для генерации мы реализовали простейшую функцию, которую Печкин использует каждый раз при создании вами рассылки.
Данный автоматический конвертер доступен в Печкин.Лаборатории для всех подряд, даже если у вас нет аккаунта на Печкине.
Ссылка на демонстрацию работы: labs.pechkin-mail.ru/html2text/
Автор: dsosnin