Задача
Что мы сделали
Рассылка, в которой главное — не сгореть
Отправить письмо умеет кто угодно. Сложность холодной рассылки в другом: сделать так, чтобы почтовые службы и дальше пускали ваши письма во входящие, а не в спам.
Мы собрали свою систему, в которой доставляемость — не отчёт в конце, а предохранитель, срабатывающий до того, как домен испорчен.
Верхняя строка — не украшение, это выключатели. Прогрев, автоотправка, предохранитель и фоллоу-апы видно сразу, вместе с их состоянием.
Доставляемость как механизм, а не как отчёт
Холодная база убивает домен за два дня, если отправлять по ней так, будто это подписчики. Поэтому в системе есть три вещи, которые работают до письма, а не после.
Прогрев. Новый ящик начинает с десятков писем в сутки и наращивает объём по расписанию. Пока прогрев не дошёл до нужного темпа, большая рассылка с него просто не уйдёт.
Проверка адресов. Прежде чем адрес попадёт в очередь, система смотрит, есть ли у домена почтовый сервер и не принимает ли он всё подряд. Домены, отвечающие «да» на любой адрес, помечаются отдельно — по ним статистика отказов врёт.
Предохранитель. Если доля отказов в рассылке переходит порог, отправка останавливается сама. Почтовые службы начинают считать домен подозрительным примерно с двух-трёх процентов — предохранитель срабатывает раньше, чем это заметят они.
База, в которой видно состояние каждого
Контакт — это не строка с адресом. У него есть статус, категория, язык, приоритет и группы, и по каждому из этих полей список фильтруется. Импорт из CSV сам определяет кодировку и разделитель, показывает сопоставление колонок и спрашивает, что делать с дублями — пропустить или обновить.
Кампания как очередь, а не как кнопка
Рассылка не идёт одним выстрелом. Она ложится в очередь с паузой между письмами, и очередь видна в панели: сколько написано, сколько ждёт, сколько ушло сегодня. Это скучно выглядит и спасает домен.
Открытия и клики считаются, отписка работает одним переходом, а на каждое событие можно получить уведомление в Telegram — чтобы не держать панель открытой весь день.
Шаблоны с переменными
Письмо пишется один раз, а подставляются имя, компания, сайт и то, что нашлось при подготовке. Предпросмотр показывает результат сразу на конкретном контакте — так ошибка в переменной видна до отправки, а не после тысячи писем.
Ответы там же
Худшее в холодной рассылке — когда ответы падают в общий ящик и теряются между счетами. Поэтому входящие подтягиваются в систему и ложатся рядом с контактом: видно, кому писали, что ответили и на каком шаге остановились.
Как это делалось
Что под капотом
Платформа
PHP без фреймворков, MySQL, свой маршрутизатор и слой доступа к данным. Ставится на обычный хостинг, обновляется копированием файлов.
Отправка
Внешний почтовый сервис как транспорт, своя очередь с паузами поверх него, трекинг открытий и кликов, страница отписки.
Доставляемость
Прогрев ящиков, проверка MX и «принимает всё подряд», отдельный учёт мёртвых адресов и предохранитель, останавливающий рассылку при росте отказов.
Что получилось
Система, в которой холодная рассылка — это не «нажал и ждёшь», а управляемый процесс: адрес проверяется до очереди, ящик прогревается по расписанию, а отправка останавливается сама, если что-то пошло не так.
Один человек ведёт базу на десятки тысяч контактов, не держа в голове ни состояний ящиков, ни порогов почтовых служб — всё это система показывает в одной строке сверху.


