Комментарии 38
Я бы решал эту проблему при помощи UserJS, чтобы вообще не писать сложные парсеры, в браузерах это уже все есть, достаточно после загрузки страницы пройтись по всем элемента и дописать в style.cssText стили, полученные при помощи getComputedStyle.
Хотя серверное решение конечно же может понадобиться…
Javascript в почтовом сообщении штука сомнительная. Например, в Thunderbird 3 он выключен.
Javascript в самом сообщении и не нужен, здесь о преобразовании перед отправкой речь идет.
ммм, интересная идея, только письма-то заранее сделанные, типа активации пользователя, прогонять их через браузер совсем не хочется, не удобно это
вот если бы можно было поставить на сервер браузер какой-нибудь, типа firefox-а и заставить его что-то сотворить с html-кой + css в фоне, чтобы это было не на стороне пользователя — вот это было бы круто
оно возвращает значения в пикселях. по твоему у всех монитор такой же как у тебя?
Css parser отлично работает, я например просто составляю css-ки с расчетом на то что они будут использоваться в письмах, т.е. не использую сложные селекторы и наследование, получаются классы вроде strong_text и strong_red_text, различающиеся только цветом.
тоже вариант, но отказываться от всех перимуществ css из-за почты — я не могу пойти на такое
Ну тут уже зависит от ваших писем и задач конечно. Но с другой стороны — это всего лишь письмо, я на своей практике ни разу не видел письма где нельзя было бы обойтись без вложенности стилей и всяких таких примочек.

Ну и кстати вы можете генерировать css) Sass вам в помощь.
если бы это было просто письмо — то да, можно было бы обойтись без вложенности стилей и всяких примочек, но хочется-то использовать уже существующий код, который используется на основном сайте, например, на сайте есть красивая панелька, она уже сверстана и оттестирована, находится в отдельном partial-е, хочется в письме сделать:

render :partial => 'shared/panel'

и не заморачиваться больше. Да, я понимаю, что по большому счету для лучшей поддержки почтовыми клиентами было бы круто переверстать все это дело таблицами, убрать все сложные, неподдерживаемые css-правила и т.п. но хочется-то, хотя бы на первое время, сделать быстрое решение, чтобы показать его начальству, а потом уже в фоне по мере сил и возможностей перевестать по-правильному.
Неправильное решение. Сайт — это сайт. Письмо — это письмо. По-хорошему, вы не должны использовать в письме такие элементы сайта, как красивая панелька. Вы хоть в одной рассылке такой бред видели? Подпишитесь на рассылку Apple и посмотрите как надо правильно офорлять рассылки.
это от каких? неужели так сложно более общие селекторы писать вначале?
Самое главное правило HTML-писем: обязательно включать в сообщение и plain text-версию.
Если в письме есть аттачмент картинки, то в HTML-ке ее можно отобразить. Возможно, и со стилями такой трюк пройдет.
Техника такая:

где 25bc9b0e72ffee30f74314732989afd7 — Content-Id картинки в письме. На сколько помню, Content-Id может быть любым, я ставил имя файла.
Немного неправильно отправил.
Техника такая:
<img src="cid:25bc9b0e72ffee30f74314732989afd7">
где 25bc9b0e72ffee30f74314732989afd7 — Content-Id картинки в письме. На сколько помню, Content-Id может быть любым, я ставил имя файла.
не все почтовики поддерживают вставленный CSS документ
хотя конечно не поддерживают его только браузерные типа gmail, по очевидным причинам
По-моему, лежащее на поверхности решение — отказаться от семантики и использовать CSS-классы вроде «red» «100-percent-wide».

Мерзко, но в случае с почтой может быть оправдано.
или не отказываться и генерить страшный css.
В любом случае придется обходить ограничения email-клиентов — от них пока никуда не деться
Такая же проблема стоит перед верстальщиками виджетов для вставки в блоги.
Например, ЖЖ еще и некоторые инлайновые объявления режет (position: relative и absolute).

Мне кажется, можно написать простенькое расширение для внутреннего пользования (под FF или Chrome), по совету тов. Octane, и генерить с его помощью шаблоны. Не так уж часто эти шаблоны меняются, имхо.
НЛО прилетело и опубликовало эту надпись здесь
аутлук ваще жжёт. у него свой собсвенный движок рендеринга ХТМЛ, который очень похож на то, как рендерит разметку Word. так что для писем основной принцип — чем проще, тем лучше. иначе есть все шансы взорвать себе мозг, пытаясь понять почему в аутлуке письмо выглядит так странно
НЛО прилетело и опубликовало эту надпись здесь
Мы в свое время отказались от html в письмах, из-за неадекватного восприятия — половина пользователей отправляет письмо с html в корзину не читая даже заголовок. Необходимый контент генерировался на сервере, а в письмо была вставлена личная ссылка.

Это далеко не универсальный способ, во-первых лишний клик, во-вторых безопасность.
Мы тоже рассылаем html письма, но их читает далеко не 50%.

Все нормальные импортные магазины присылают html письма.

Все чинно, красиво и никакого спама и люди читают. Так что не стоит наезжать на красивые письма.
apple.com рассылает офигенно красиво сверстанные письма.
Я уверен, что они немного больше вас.
По-моему, поскольку проблема описана, проще всего форкнуться и решить её.

В методе
def render_inline(css_doc, html_doc)

надо просто получить список всех селекторов и потом просто отсортировать по увеличению важности.

Цитирую Википедию:

Приоритеты рассчитываются таким образом (от большего к меньшему):
свойство задано при помощи !important?
стиль прописан напрямую в теге?
количество идентификаторов (#id) в селекторе (чем больше, тем больше приоритет);
количество классов (.class) и псевдоклассов (:pseudoclass) в селекторе;
количество имён тегов в селекторе;
Кроме того, имеет значение относительный порядок расположения свойств — свойство, указанное позже, имеет приоритет.

В общем, вполне реализуемо, за небольшое время. Если бы мне было нужно, я бы реализовал.
надо попробовать, но что-то мне подсказывает что тут не все так просто как кажется
Молодцом!

Теперь можно отправить pull request и все мы будем благодарны тебе при случае!
Microsoft часто делает рассылку и все отображается очень корректно, картинки к картинкам, тексты к текстам, все, что не хочешь — не открываешь. Просто заверстанная страничка — очень удобно мне кажется…
Отлично! RC очень порадовал. Правда сначала было немного непривычно, т.к. изменились некоторые обыденные команды, а так очень нравится. Ждём полного Релиза"
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.