Android and Web Developer
0,0
рейтинг
17 января в 13:35

Разработка → Email-рассылка со своего сервера: подводные камни

Недавно мы по ряду причин решили отказаться от стороннего сервиса для 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 (насколько я понял) расставляет переносы уже после подписывания письма, поэтому лучше подавать постфиксу на вход письмо с уже правильно расставленными переносами.

Вот пока и всё. Совместными усилиями мы можем дополнять этот пост полезными советами из своей практики. И в конце небольшой опрос:
Если вы отправляете рассылки, каким инструментом вы пользуетесь?

Проголосовало 284 человека. Воздержалось 144 человека.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

@ookami_kb
карма
22,0
рейтинг 0,0
Android and Web Developer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (30)

  • +4
    Настоящие подводные камни — это обработка всех жалоб на спам и ситуаций с невозможностью доставки. При условии, что в остальном письма идеальны, что все эти SPF, DKIM, DMARC настроены как положено, а письмо не производит впечатления спама, будучи доставлено на ряд почтовых ящиков популярных почтовых серверов.

    По этой и многим другим причинам я в своё время оказался от решения «своими руками» и использую Sendy.co (в качестве собственно сервиса рассылок — Amazon SES).

    Да, и ещё: вынимать IP своего почтового сервера из чёрных списков после практически неизбежных жалоб на спам тоже задача ещё та.
    • +1
      Ну, если рассылка — реально не спам, а что-то полезное, то ситуацию с отправкой в спам можно контролировать через всякие сервисы вроде «Почтового офиса» на Яндексе. Там же можно смотреть, как люди реагируют на ваши письма.
      А вот blacklist сервисы вроде uceprotect — это реальный трэш. Мало того, что любой желающий может занести туда любой ip-адрес вручную через систему сомнительных репортов, так они еще и вымогают деньги за «вынимание» ip-адреса (по 100 зеленых за IP-адрес) и принципиально не рассматривают варианты ошибочного внесения.

      В свое время у меня так нехило «подгорало», когда один известный европейский ДЦ периодически блокировал нам сервер, руководствуясь этим списком. Приходилось стучать в техподдержку и объяснять, что почтового сервера у нас на заблокированной машине вообще нет (предлагали им даже проверить вручную), а то, что у нас есть недоброжелатели которые всеми возможными способами пытаются нам нагадить в том числе генерируя фейковые спам-репорты в сомнительных блэклистах — не наша вина.
      • 0
        К слову, тут SES со своим пулом исходящих адресов тоже более или менее адекватно.

        И то приходится перед запуском кампании несколько раз править письмо, пока все эти Yahoo, Mail.ru и прочие монстры не перестанут отправлять письмо в спам (по неизвестным науке причинам, понять логику их работы я не могу — вроде бы и в чёрных списках адреса нет, а письмо всё равно помечается как нежелательное)

        В общем, да, сплошная чёрная магия.
        • 0
          Насколько я понимаю, mail.ru и прочее пользуются эвристиками, основанными на поведении пользователей и их личных предпочтений. Например, один пользователь рассылки с сайтов поиска работы помечает спамом, в то время как второй пользователь (который в этот момент ищет работу) читает их все и переходит по ссылкам в письме. Для таких пользователей, очевидно, поведение спам-фильтра могут быть разными, и это хорошо. Опять же, инструменты вроде postmaster.mail.ru помогут в таких случаях понять, какой процент пользователей негативно реагируют на ваше письмо. Если такое количество велико, и все последующие письма начинают уходить в спам — возможно, проблема в содержании рассылки, а не в почтовике.

          Все это еще поддается логическому объяснению, в отличии от черных списков ip-адресов, которые к спаму как правило не имеют никакого отношения.
          • +1
            Тут ещё немаловажный момент: если это именно рассылка (все причиндалы — заголовки в письме и пр. — на месте), то резонный вопрос: если пользователь сам и подписался, то на кой помечает спамом? Отпишись, если не нужно. Удали, если действительно неинтересно. Иначе — на кой подписывался?

            Помечать неинтересные выпуски как спам — крайне плохая идея. Учитывая, что почтовый сервис может обобщать оценки от разных пользователей, и потом отправлять письмо по умолчанию в спам. А самообучающиеся фильтры (если такие есть) и вовсе будут сбиты с толку.

            Оптимально — оценивать и применять итоги для конкретного пользователя (не обобщая его выбор на всю службу в целом), а при наличии признаков списка рассылки предлагать отписаться или просто удалить.

            Впрочем, тут нужен представитель Mail.ru, чтобы расставить все точки над «i» в данном вопросе.
            • 0
              Все заголовки на месте — это еще не гарант «белого» письма: некие «бизнесмены» регулярно заливают базы (спарсенные или украденные с нормальных подписных баз через уязвимости в сервисах) в сервисы рассылки. И начинают на ящик приходить письма о том, что пользователь, наверное, уже соскучился по Ивану Пупкину и хочет узнать секреты его миллионов. В подвале письма: «Вы получили это письмо, так как подписались на рассылку на сайте 127.0.0.1».
              • 0
                Ну так DKIM-то эти «бизнесмены» подделать не смогут — значит, уже не все заголовки будут на месте.
                • 0
                  К сожалению, не очень хорошо разбираюсь в технологиях рассылок, но вроде как почтовые сервисы (mailchimp, smartresponder и т.п.) имеют настроенный DKIM, или нет?
                  Я имел в виду, что база заливается в «нормальный» (но не топовый) сервис рассылки, видимо убеждают саппорт поддельными «анкетами с конференции», или просто саппорт не особо смотрит на базу.
                  • +1
                    DKIM позволяет проверить, подписано ли письмо ключом домена-отправителя. От попытки сфабриковать рассылку от имени не своего домена это защищает (SPF поможет проверить, является ли сервер-отправитель легитимным для данного домена)

                    Другое дело, если залить чужую базу и отправлять с другого адреса.

                    Тут, правда, одна тонкость: не все почтовые службы проверяют наличие корректных признаков аутентификации (SPF, DKIM) и наличия определения политики того, что делать с нарушителями (DMARC).

                    К слову, сервисы рассылки, если только они не обслуживают целенаправленно спамеров, могут (и в спорных случаях делают это) проверять годность базы (например, потребовать подтверждения, что подписчик действительно давал согласие на получение рассылки).
            • 0
              Ну вот Gmail так и делает, если есть List-Unsubscribe, и с письмом всё в порядке, то когда пользователь нажимает «В спам», гугл предлагает просто отписаться от этой рассылки.
    • 0
      А еще «прогревать» IP адреса для новых серверов. Т.е. не сразу врубать рассылки с непрогретого адреса на полную, а начинать по чуть-чуть рассылать. И прочие шаманские процессы. (:
  • +1
    Доставка, а не рассылка со своего сервера, вот где челленж. Сделаете 99% гарантии доставки, и уже можно продавать как сервис :)
  • 0
    Люююдиии, а кто удачно воевал с AT&T? Они со своим ******** DNSBL достали. Мало того что они игнорят запросы на делист, так ими еще и разные Comcast'ы пользуются.
    • +1
      Проще предусмотреть быструю смену исходящего IP'шника. Да, действительно, даже если рассылаешь 100% честную рассылку тем клиентам, кто зарегался на сервисе, иногда приходится вести себя как спамер. Есть идиоты, которые в 21 веке до сих пор используют DNSBL, в т.ч. такие крупные, как yahoo, hotmail, apple.
      • +1
        Есть идиоты, которые в 21 веке до сих пор используют DNSBL, в т.ч. такие крупные, как yahoo, hotmail, apple.

        А не могли бы вы развернуто осветить свою точку зрения по этому моменту. А то мне, как сисадмину на пенсии непонятно чем вас так разозлила эта система. В мои времена возможность разом отрезать всех диалапщиков очень помогала в работе. И да, я хорошо понимаю что такое DNSBL и к чему может привести его неразумное использование. Но подозреваю, что перечисленые yahoo, hotmail, apple используют его разумно.
        • +2
          В DNSBL легко попасть, в т.ч. по фейковой жалобе (см. выше коммент другого) и, бывает, трудно удалиться. Или например, вот вам кейс: спамер слал с виртуалки, попал в блэклист, избавился от неё, IP отдали кому-то ещё. И новому владельцу разгребать.

          Я не знаю, сколько вы лет «на пенсии», но уже давно придумали обучаемые фильтры. Вон, gmail не пользуется DNSBL, все довольны. Почему бы не взять с гугла пример? Есть DMARC, DKIM — тоже облегчает сортировку трафика.

          > Но подозреваю, что перечисленые
          На надо подозревать, просто начните с чего-то простого типа 500 тыщ писем в неделю и сами увидите.
          • 0
            В общем мне ясна ваша позиция. Но смею вас уверить не DNSBL тому виной. Я не просто так написал о «неразумном использовании». Никогда не пользовался DNSBL-базами SORBS или Spamhaus. Но, во времена нулевых, база диалапщиков сильно прореживала трафик от ботов.
            А в данном случае всегда будут админы, считающие что один из компонентов защиты — самодостаточная панацея. И вечно будут об это спотыкаться.
            • 0
              Плохо когда DNSBL — используется именно как blacklist. Именно так его использует AT&T.
              Хорошо когда DNSBL используется для понижения «рейтинга», т.е. комбинируется с другими механизмами.
              greylisting тоже неплох, если, например ограничивать количество входящей почты — скомпрометированный почтовик ведь начнет как из пулемета строчить, вот и будет толк от greylist'а.
  • 0
    Пользуемся SES
  • +2
    mail.ru вообще долбанутые — например, тупой юзер зарегался на сайте, забыл об этом, на очередное письмо жмёт кнопку «это спам», в итоге «мыло» просто блочит подобные письмо вообще всем получателям на mail.ru; плюс, шлёт автоматически сгенерённую абузу на returnpath.net — это мутная американская контора, которая шлёт абузы дальше провайдерам и заносит в DNSBL. В общем, за гранью добра и зла.
  • +1
    «Еще одна подлянка от ukr.net. На эту тему у них есть только вот такой придурковатый FAQ.…
    опцию, так что надо просто подождать несколько часов после первого письма.»

    Вы уверены что реально несколько часов? Обычно greylisting минут 15 требует (их FAQ я прочитал, но не верится).

    «нужно ввести код, отправленный в письме, или перейти по ссылке в этом же „

    А вот тут есть некоторые соображения… http://searchengines.guru/showthread.php?t=917810, сообщение #5 и далее холливар на тему “Самая надежная защита от спама — это когда на адрес, с которого ранее не получали письма, приходит письмо со ссылкой на капчу для подтверждения.» с апологетом и, возможно, автором этого метода.

    • +2
      Вы уверены что реально несколько часов? Обычно greylisting минут 15 требует (их FAQ я прочитал, но не верится).

      Проверил сейчас по логам, первый раз письмо отправлено в 13:24, успешно отправлено — в 15:51.

      Самая надежная защита от спама — это когда на адрес...

      Это скорее защита от писем вообще. Если бы надо было еще капчу вводить, это было бы вообще за гранью… Но даже со ссылкой — в принципе-то парсить письмо и переходить по ссылке автоматически проблемы особой нет. И от спамера оно поможет, только если он увидит такую защиту и умрет со смеху. А вот всем остальным доставляет неудобства.

      Да и вообще, ну для чего тогда папка «Спам»-то придумана? Ну считает сервер письмо слишком подозрительным, так пусть тогда хотя бы туда его положит. Пользователю надо будет — он просмотрит папку, и скажет, что это — не спам. А когда письмо вообще не приходит, это уже свинство. И этим грешат и i.ua, и ukr.net, и mail.ru.
    • 0
      кур.нэт — прошел их грэйлист трижды, 4-7 часов.
  • –1
    Начинаю и сам подумывать о рассылке! Читаю кучу статей и форумов. Вот нашел тоже интересную статью по емейл рассылке ТЫЦ. Наверно остановлюсь на сервисе Mailchimp.
  • 0
    В последнее время смотрю тему рассылок — у всех разные мнения, кто-то рассылает через сервисы вроде mail chimp и пр., кто-то через SES, кто-то своими силами. Вопрос: если речь идет не о сервисных/транзакционных письмах, а об информационной рассылке клиентам (естественно белой, с подтверждением и ссылками отписки), то какой вариант дешевле, учитывая затраты времени тоже как расход? Ориентируясь на средние интернет-магазины и сервисы с базой в несколько тысяч клиентов и частотой порядка раз в неделю.
    • 0
      Технически настроить рассылку не так уж и сложно/дорого. Возможно, основная масса проблем, как подсказывают товарищи выше, еще впереди, но пока удобство работы со своей системой + гибкость настройки под себя (против кривого интерфейса сервиса), полный контроль над аккаунтами подписчиков (против отсутствия такого) — это уже реальные плюсы. А деньги на реализацию можно окупить за несколько месяцев. Может, просто с сервисом не повезло.
      • 0
        А что скажете насчет SES? Как я понял, это некое промежуточное решение между «готовый сервис» и «писать своё». Есть ли опыт с ним?
        • 0
          Нет, тут опыта не было, тоже интересно. cawakharkov выше говорил, что пользуются, предлагаю у него спросить.
          • 0
            У нас вся почта из апи и админки идёт через SES, ну и в других проектах использовал, для различных уведомлений и спам-компании. В итоге всё сводится к SMTP.
        • 0
          SES — это API для отправления почты и автоматической обработки проблем с доставкой и жалоб на спам. Собственно удобного интерфейса, как в службах вида SmartResponder, там нет.

          Я уже упоминал (платный) продукт Sendy.co, который заточен под SES и предоставляет тот самый интерфейс, аналитику и пр.

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