Главная » Portfolio » Система холодных рассылок — доставляемость как механизм
CRM Email-рассылки / Свой продукт

Система холодных рассылок — доставляемость как механизм

Seganiko
Клиент Seganiko
Сфера Email-рассылки / Свой продукт
Тип CRM
Используемые технологии PHP без фреймворков, MySQL, очередь отправки с паузами, прогрев ящиков, проверка MX, трекинг открытий и кликов, уведомления в Telegram
Контекст

Задача

Вести холодные рассылки, не сжигая домен: отсеять мёртвые адреса до отправки, наращивать объём, не задевая фильтры, и держать ответы там же, где отправку.
Наш подход

Что мы сделали

Три механизма работают до письма: прогрев ящиков по расписанию, проверка MX и доменов, принимающих всё подряд, предохранитель по проценту отказов. Поверх — очередь с паузами вместо залпа, шаблоны с переменными и предпросмотром на реальном контакте, входящие рядом с контактом.
Детали проекта

Рассылка, в которой главное — не сгореть

Отправить письмо умеет кто угодно. Сложность холодной рассылки в другом: сделать так, чтобы почтовые службы и дальше пускали ваши письма во входящие, а не в спам.

Мы собрали свою систему, в которой доставляемость — не отчёт в конце, а предохранитель, срабатывающий до того, как домен испорчен.

Дашборд рассылок: состояние системы, процент отказов, очередь, размер базы и график за 30 дней

Верхняя строка — не украшение, это выключатели. Прогрев, автоотправка, предохранитель и фоллоу-апы видно сразу, вместе с их состоянием.

Что это

  • Продукт: собственная разработка Seganiko
  • Назначение: холодные рассылки и follow-up
  • База: более 55 тысяч контактов
  • Стек: чистый PHP, без фреймворков

Задачи

  • Не потерять домен из-за резкой отправки по холодной базе.
  • Отсеять несуществующие адреса до отправки, а не после.
  • Держать переписку в одном месте, а не в пяти почтовых ящиках.
  • Сделать так, чтобы систему мог вести один человек.

Что внутри

  • Прогрев ящиков и предохранитель по проценту отказов.
  • Проверка почтовых серверов домена до отправки.
  • Очередь отправки с паузами, трекинг открытий и кликов.
  • Шаблоны с переменными и ответы в той же системе.

Доставляемость как механизм, а не как отчёт

Холодная база убивает домен за два дня, если отправлять по ней так, будто это подписчики. Поэтому в системе есть три вещи, которые работают до письма, а не после.

Прогрев. Новый ящик начинает с десятков писем в сутки и наращивает объём по расписанию. Пока прогрев не дошёл до нужного темпа, большая рассылка с него просто не уйдёт.

Проверка адресов. Прежде чем адрес попадёт в очередь, система смотрит, есть ли у домена почтовый сервер и не принимает ли он всё подряд. Домены, отвечающие «да» на любой адрес, помечаются отдельно — по ним статистика отказов врёт.

Предохранитель. Если доля отказов в рассылке переходит порог, отправка останавливается сама. Почтовые службы начинают считать домен подозрительным примерно с двух-трёх процентов — предохранитель срабатывает раньше, чем это заметят они.

Почему без фреймворка: система живёт на обычном хостинге рядом с другими сайтами, работает годами и должна обновляться без миграций. Чистый PHP здесь не аскеза, а способ не зависеть от чужого цикла релизов.

База, в которой видно состояние каждого

Контакт — это не строка с адресом. У него есть статус, категория, язык, приоритет и группы, и по каждому из этих полей список фильтруется. Импорт из CSV сам определяет кодировку и разделитель, показывает сопоставление колонок и спрашивает, что делать с дублями — пропустить или обновить.

Список контактов с фильтрами по статусу, категории, языку и приоритету

Кампания как очередь, а не как кнопка

Рассылка не идёт одним выстрелом. Она ложится в очередь с паузой между письмами, и очередь видна в панели: сколько написано, сколько ждёт, сколько ушло сегодня. Это скучно выглядит и спасает домен.

Открытия и клики считаются, отписка работает одним переходом, а на каждое событие можно получить уведомление в Telegram — чтобы не держать панель открытой весь день.

Раздел кампаний: список рассылок со статусами и статистикой

Шаблоны с переменными

Письмо пишется один раз, а подставляются имя, компания, сайт и то, что нашлось при подготовке. Предпросмотр показывает результат сразу на конкретном контакте — так ошибка в переменной видна до отправки, а не после тысячи писем.

Шаблоны писем с переменными подстановками

Ответы там же

Худшее в холодной рассылке — когда ответы падают в общий ящик и теряются между счетами. Поэтому входящие подтягиваются в систему и ложатся рядом с контактом: видно, кому писали, что ответили и на каком шаге остановились.

Как это делалось

1
Этап 1
База и импорт
Контакты со статусами, категориями, языками и группами. Импорт CSV с определением кодировки, сопоставлением колонок и обработкой дублей.
2
Этап 2
Отправка
Очередь с паузами вместо залпа, шаблоны с переменными, трекинг открытий и кликов, отписка, уведомления в Telegram.
3
Этап 3
Доставляемость
Прогрев ящиков по расписанию, проверка почтовых серверов домена до отправки, предохранитель по проценту отказов.
4
Этап 4
Переписка
Входящие рядом с контактом, фоллоу-апы по сценарию, история шагов на каждом адресате.

Что под капотом

Платформа

PHP без фреймворков, MySQL, свой маршрутизатор и слой доступа к данным. Ставится на обычный хостинг, обновляется копированием файлов.

Отправка

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

Доставляемость

Прогрев ящиков, проверка MX и «принимает всё подряд», отдельный учёт мёртвых адресов и предохранитель, останавливающий рассылку при росте отказов.

Что получилось

Система, в которой холодная рассылка — это не «нажал и ждёшь», а управляемый процесс: адрес проверяется до очереди, ящик прогревается по расписанию, а отправка останавливается сама, если что-то пошло не так.

Один человек ведёт базу на десятки тысяч контактов, не держа в голове ни состояний ящиков, ни порогов почтовых служб — всё это система показывает в одной строке сверху.


Похожий проект?

Обсудим ваши цели и найдём лучшее решение.

Запросить бесплатную оценку →
Есть вопросы?

Обсудим ваш
проект.

Первая консультация бесплатно, без обязательств.