Недавно мы по ряду причин решили отказаться от стороннего сервиса для email-рассылок и осуществлять рассылки со своего сервера. Я бы хотел указать на ряд трудностей, с которыми мы столкнулись в процессе, и пути их решения. Непосредственно тему верстки эта статья практически не затрагивает, но более подходящего хаба я не нашел.
Конечно, если вы давно в теме, подобные советы могут показаться банальными и очевидными, но некий свод хитростей и подсказок будет полезен начинающим рассыльщикам.
Автоответчик
Будьте готовы к тому, что люди не понимают, зачем нужен автоответчик. На вас посыпятся сотни очень важных автоответов: «Спасибо!», «Я получил ваше письмо, отвечу, как только смогу» (вот зачем мне это?), или даже просто «адылопрыда». Их что, насильно заставляют заполнять поле автоответа?! Причем у большинства автоответофилов ящик на mail.ru (с трудом воздерживаюсь от комментариев по этому поводу).
Учитывая, что у нас из ответов на письма по рассылке формируются тикеты в хелпдеске, заваливать поддержку сотнями бесполезных тикетов после каждой рассылки не хочется.
Как с ними бороться? Казалось бы, открываем RFC, читаем, что нам нужно парсить заголовок Auto-Submitted: на предмет его наличия и неравенства значения слову no и получаем профит. Так? Неа. Ключевое слово там SHOULD. И если, например, gmail, yandex и yahoo восприняли это как руководство к действию, то вот mail.ru (опять ты?) слишком горд, чтобы слушать чьи-то советы. Спасибо хоть за заголовок X-AutoReply. Туда же идет и rambler со своим X-Autogenerated. Страшно представить, что на этот счет придумали еще более невменяемые серверы типа i.ua (о них еще пойдет речь), но от них пока автоответов не приходило. Может, у них просто вообще такой функции нет?
Server name
Помните, что в параметре myhostname postfix'а должен быть указан FQDN. И если у вас там будет стоять не example.com, а просто example, то могут возникнуть проблемы с доставкой письма. Опять же, Gmail, Yandex и даже MailRu на это забивают, но вот тот самый злополучный i.ua (а также ukr.net) просто отпинывает письма, никак это не комментируя.
Greylisting
Еще одна подлянка от ukr.net. На эту тему у них есть только вот такой придурковатый FAQ. Суть в том, что если ваш сервер не известен укрнету, то письма он доставлять сразу не будет. Чтобы попасть в его белый список, надо послать то же самое письмо через определенный промежуток времени. К счастью, postfix по умолчанию поддерживает эту опцию, так что надо просто подождать несколько часов после первого письма.
Quarantine
Нас вновь радует i.ua. По какой-то, известной только ему, причине он решил поместить часть наших писем в карантин. Чтобы вытащить их из этого карантина, нужно ввести код, отправленный в письме, или перейти по ссылке в этом же письме. Тут я уже сдался — писать отдельный парсер служебных писем для удовлетворения прихоти параноидально настроенных админов в мои планы не входило.
Верстка
По поводу самой верстки писем на хабре уже была куча статей, вряд ли я добавлю к ним что-то новое. Я выступлю немного с другой позиции: что делать, когда уже есть сверстанная страница на сайте, а ее надо отправить письмом. У нас, например, есть рассылка, которая частично состоит из материалов на сайте. Не переверстывать же ее специально под письмо? А если таких страниц почти 200? И периодически в них вносятся правки?
Поэтому я нашел для себя библиотеку, которая позволяет из готового «сайтового» хтмла сделать правильную email-версию, с инлайновыми стилями, абсолютными путями до картинок, исправленными под email-клиенты стилями и т.д. Не всегда это у нее получается идеально, но когда надо письма отправлять все-таки надо, а дедлайн — вчера, библиотека очень выручает.
В планах вот еще есть встроить ее в сайтовый workflow, чтобы она автоматически создавала email-версию при изменении контента.
Отписаться от рассылки
Про заголовок List-Unsubscribe на том же хабре писали еще в 2010 году. Тут главное помнить, что в том же Gmail, чтобы в письме появилась кнопка «Отписаться», надо, чтобы гугл считал вас добросовестным отправителем. На практике надо правильно настроить DKIM, в том числе учесть следующий пункт. Также, как минимум, гугл не требует, чтобы в заголовке List-Unsubscribe была именно mailto: ссылка, достаточно ссылки на сайт со страницей отписки.
DKIM: Body hash did not verify
Столкнулся с такой фразой в заголовках письма, когда заметил, что в части отправленных писем GMail не помещает кнопку «Отписаться». По сути, здесь всё просто — тело письма было изменено уже после подписывания, поэтому хэши не совпадают.
Выяснить причину этого было уже не так просто. Но покопавшись, я выяснил, что согласно RFC2822 длина строки тела сообщения не должна превышать 998 символов. По какой-то причине postfix (насколько я понял) расставляет переносы уже после подписывания письма, поэтому лучше подавать постфиксу на вход письмо с уже правильно расставленными переносами.
Вот пока и всё. Совместными усилиями мы можем дополнять этот пост полезными советами из своей практики. И в конце небольшой опрос:
Автор: ookami_kb