Тестирование по сид-листам: как собрать свою панель адресов и честно измерить Inbox Placement
Сид-лист меряет не доставляемость, а раскладку писем по папкам на фиксированной панели ящиков — и это ловушка. Разбираем, как инженеру собрать собственную панель у реальных провайдеров, снять раскладку через IMAP, посчитать взвешенный Inbox Placement Rate и почему цифрам панели нельзя верить, пока не сверишь их с Google Postmaster, Microsoft SNDS и DMARC-агрегатами.
EvilMail Team13 июля 2026 г.12 мин чтения
Кампания ушла в 40 тысяч адресов, вендорский дашборд рисует «98% Inbox» ровными зелёными столбиками, а конверсия проваливается в пол. Знакомая сцена. Отчёт не врёт — он честно показывает то, что измерил. А измерил он раскладку писем по папкам на панели из четырёх десятков синтетических ящиков-пустышек. Эти ящики не открывают вашу почту, не отвечают на неё, не держат вас в адресной книге — то есть не подают Gmail ни одного из сигналов, по которым тот на самом деле решает, класть письмо во «Входящие» живого человека или нет.
Сид-тест меряет placement на фиксированной панели, и только это. Не доставляемость конкретному получателю, не репутацию, не конверсию. Держите эту рамку в голове — и инструмент становится полезным, как регрессионный тест инфраструктуры. Забудете — получите дорогую иллюзию контроля. Дальше разберём, как собрать такой тест самому, снять раскладку через IMAP, посчитать метрики без самообмана и почему единственная цифра с панели ничего не стоит без сверки с внешними сигналами.
Что сид-лист видит, а что нет
Панельный bias — главная причина, почему нельзя жить по одной цифре. У seed-ящика нет истории: он не открывал ваши прошлые письма, не переносил их из спама, не писал вам в ответ. А именно engagement-сигналы двигают классификаторы Gmail и Outlook сильнее любой DNS-записи. Поэтому «зелёная» панель говорит ровно одно: письмо технически способно попасть во «Входящие» — не более.
контентные триггеры — спам-фразы, ссылки на домены из чёрных списков, кривой HTML, дисбаланс текст/картинка;
блок по домену или IP — когда провайдер режет вас на SMTP-уровне или роняет в спам всё скопом.
Что он упускает:
репутационные градиенты — панель либо во «Входящих», либо в спаме, полутонов нет;
вкладку Promotions у Gmail — для промо это норма, для транзакционного письма провал;
per-user фильтры и персональные правила живых получателей.
Отсюда установка: seed-тест — термометр, а не лечение. Он показывает, что температура поднялась. Чинит инфраструктура.
Собираем панель адресов
Готовые публичные seed-адреса из интернета не берём никогда — они выжжены, помечены как спам-ловушки и сами по себе тянут репутацию вниз. Панель собирается руками и под свою аудиторию.
Состав на 2026 год: Gmail (personal + аккаунт в Google Workspace), Outlook.com/Hotmail, тенант Microsoft 365, Yahoo, Mail.ru, Yandex, GMX/web.de, iCloud, Proton (через Bridge для IMAP). Пропорции — не поровну, а по долям вашей реальной базы. Если 60% получателей на Gmail, панель должна это отражать; веса потом войдут в формулу IPR. Минимум 3–5 ящиков на провайдера, иначе персональные фильтры дают шум, который вы примете за тренд.
Гигиена отличает рабочую панель от бесполезной. Ящики должны быть живыми: возраст больше 30 дней, периодические логины, чтение части входящих и — главное — ручной вынос ваших писем из спама, когда они туда падают. Так вы обучаете фильтр ровно тому, что делает лояльный подписчик. Мёртвая, не тронутая полгода панель со временем сама сползает в спам и начинает врать в обратную сторону.
Отправка зонда
Зонд обязан идти той же цепочкой, что и боевая рассылка: тот же MTA, тот же IP-пул, тот же домен, тот же DKIM-селектор, тот же шаблон. Отправите с другого relay — протестируете чужую репутацию, а не свою. Каждому адресу — уникальный токен в Message-ID и в кастомном заголовке X-Seed-Token, чтобы коллектор нашёл именно это письмо, а не спутал с фоновым трафиком ящика.
Здесь campaign.eml — тот же собранный шаблон, что уйдёт в боевую рассылку, а seed-заголовки просто дописываются поверх. Тайминг важен: раскладку снимаем не сразу. Классификаторы «догревают» вердикт — письмо может первые секунды полежать во «Входящих» и уехать в Promotions. Снимаем через 2–5 минут и повторно через час; разошлись результаты — это сам по себе сигнал о нестабильной репутации.
Снимаем раскладку через IMAP
Провайдеры называют папки по-разному, и это половина всей возни. У Gmail спам — [Gmail]/Spam, а вкладка Promotions вообще не отдельная папка: до неё добираются только через расширение поиска X-GM-RAW category:promotions. У Outlook спам — Junk, у Yandex — Спам кириллицей, у Mail.ru своя структура. Три исхода на ящик: Inbox (Promotions помечаем отдельной меткой, но не как спам), Spam, Missing — токен не найден нигде, письмо не дошло.
python
import imaplib
def locate(host, user, pwd, token):
M = imaplib.IMAP4_SSL(host)
M.login(user, pwd)
# спам-папку провайдера проверяем первой
for folder, verdict in [('[Gmail]/Spam', 'spam'), ('INBOX', 'inbox')]:
M.select(f'"{folder}"', readonly=True)
typ, data = M.search(None, 'HEADER', 'X-Seed-Token', token)
if data[0].split():
if verdict == 'inbox':
_, promo = M.search(None, 'X-GM-RAW', 'category:promotions')
_, hit = M.search(None, 'HEADER', 'X-Seed-Token', token)
in_promo = set(promo[0].split()) & set(hit[0].split())
return 'promotions' if in_promo else 'inbox'
return verdict
return 'missing'
Тот же скелет переиспользуется под каждый провайдер — меняются только имя спам-папки и способ определить Promotions. Результат каждого ящика пишем строкой в матрицу: провайдер, исход, метка времени. Метка времени критична — по ней потом строится тренд между релизами.
Считаем метрики честно
Базовые величины — и здесь легко себя обмануть, если свалить всё в кучу:
Delivered = Sent − Missing
IPR = Inbox / Delivered
SpamRate = Spam / Delivered
MissingRate = Missing / Sent
Missing выносим отдельно от Spam принципиально — это разные болезни. Missing чаще про SMTP-уровень: репутация IP, greylisting, tempfail, прямой блок. Spam — про контент и фильтр уже после доставки. Лечатся они разными руками, и свалить их в одну «плохую» цифру значит лечить не то.
Агрегат считаем взвешенно, а не наивным средним по панели:
Если Gmail — 60% вашей базы и у него IPR 88%, а какой-нибудь GMX с 2% дал 100%, наивное среднее замажет проблему Gmail. Взвешенное вытащит её на свет.
Пороги 2026, по которым я разбираю прогон:
агрегатный взвешенный IPR ниже 85% — красный флаг, кампанию не выпускаем;
Gmail per-provider ниже 90% при нормальном контенте почти всегда упирается в engagement и репутацию, а не в тест — сигнал идти в Postmaster, а не крутить DNS;
Promotions не равен Spam. Для промо-рассылки Promotions — норма. Для транзакционного письма (сброс пароля, чек, код подтверждения) попадание в Promotions — провал: человек не найдёт письмо, когда оно нужно ему за 30 секунд.
Почему цифрам сид-листа нельзя верить в одиночку
Ключевой изъян панели: seed-ящики никогда не жмут «Спам». Значит, жалобы — сильнейший негативный сигнал для Gmail и Yahoo — на панели физически не появляются. Панель может быть полностью зелёной, пока живые получатели пачками отправляют вас в спам, и вы этого не увидите. Ложно-положительный результат встроен в саму методику.
Лечится это только сверкой с сигналами, которые видят реальных получателей:
Google Postmaster Tools — Domain и IP reputation, spam-complaint rate, процент прохождения SPF/DKIM/DMARC. Spam rate держим ниже 0.10%, критично выше 0.30%.
Microsoft SNDS + JMRP — данные по вашему IP у Outlook/Hotmail и feedback loop с жалобами.
DMARC rua-агрегаты (XML) — кто и как аутентифицирует ваш поток, включая чужие источники, шлющие от вашего имени.
TLS-RPT — отчёты о сбоях TLS на входящем у получателя.
Практический кейс: панель рисует 96% inbox, а Postmaster показывает spam rate 0.4% и падающую Domain reputation. Верить надо Postmaster. Панель дала ложно-положительный ровно потому, что её ящики не жаловались. Правило простое: решение принимается по пересечению панели и Postmaster, а не по одной цифре с дашборда.
Инфраструктура, которая двигает placement
Когда тест красный, крутить надо не тест, а вот эти записи. Проверка одной командой:
SPF — v=spf1 mx a:mail.evilmail.pro -all. Именно жёсткий -all, не ~all: softfail в 2026 часть фильтров читает как «отправитель сам не уверен».
DMARC — v=DMARC1; p=reject; rua=mailto:[email protected]; fo=1; adkim=s; aspf=s. Строгое выравнивание (adkim=s, aspf=s) и p=reject — иначе алайнмент не считается образцовым.
DKIM — RSA 2048 бит, селектор с датой (s2026a), ротация раз в квартал. 1024 бит в 2026 — технический долг.
PTR/FCrDNS — 203.0.113.10 → mail.evilmail.pro, и A-запись этого хоста ведёт обратно на тот же IP. Прямая и обратная должны сходиться, иначе Outlook встречает вас Missing.
RFC 8058 — обязательный one-click unsubscribe для отправителей от 5000 писем в сутки на Gmail/Yahoo: заголовки List-Unsubscribe: <https://evilmail.pro/u/TOKEN>, <mailto:[email protected]> и List-Unsubscribe-Post: List-Unsubscribe=One-Click. Эндпоинт обязан отдавать 200 на POST без страницы подтверждения:
bash
curl -X POST -d 'List-Unsubscribe=One-Click' https://evilmail.pro/u/<token>
Плюс TLS на исходящем и, опционально, BIMI с VMC — последнее не двигает placement напрямую, но подтягивает open rate, а тот уже кормит engagement.
Чеклист перед прогоном
Панель прогрета: возраст ящиков > 30 дней, недавние логины, письма выносились из спама руками.
Веса провайдеров заданы по долям реальной базы, не поровну.
Зонд идёт боевой цепочкой — тот же MTA, IP-пул, домен, DKIM-селектор.
В каждом письме уникальный X-Seed-Token, синхронный с Message-ID.
Раскладка снимается в два тайминга: 2–5 минут и через час.
Postmaster Tools и SNDS подключены и открыты рядом с дашбордом панели.
Результат логируется с меткой времени — для тренда между релизами.
Missing и Spam разнесены в отчёте, IPR посчитан взвешенно.
Гоняйте seed-тест на каждый релиз шаблона и после любой смены IP или DKIM-селектора — как регрессию инфраструктуры. Но выпускать кампанию решайте по пересечению панели и Postmaster: панель показывает, что письмо *способно* попасть во «Входящие», а Postmaster — попадает ли оно туда на самом деле.