Email Spam Tester Проверить письмо · API

Как устроена проверка

Вы отправляете одно письмо на одноразовый адрес, и по нему отрабатывают 39 проверок. На этой странице они все: что каждая смотрит, сколько стоит её провал и из какого пункта стандарта она следует.

Здесь нет нашего мнения, выданного за правило. Где проверка требует того, что написано в стандарте, под ней стоит цитата из стандарта. Где требование исходит от Google или Yahoo, стоит ссылка на их страницу. Где это наше собственное суждение, так и написано.

Аутентификация

Может ли принимающий сервер доказать, что письмо пришло оттуда, откуда заявлено. Это та половина доставляемости, которая целиком живёт в DNS, и та, которую Gmail с Yahoo сделали обязательной для массовых отправителей в 2024 году.

Цепочка ARC auth.arc

ARC сохраняет результат аутентификации через пересылку. Без него список рассылки, который дописывает футер, ломает вашу подпись DKIM, и пересланная копия проваливает DMARC уже на той стороне.

Если не прошло: Отправителю делать нечего. Это важно, если вы держите список или форвардер, и этим объясняется, почему часть вашей почты проваливает DMARC после того, как её кто-то переслал.

Стоит до 2 баллов из 100 по нашей оценке.

RFC 7960 §1 — Introduction

DMARC with restrictive policies causes problems for many Mailing Lists.

RFC 8617 §2.1 — Evidence

In ARC's situation, the "evidence" is a message's authentication assessment at any point along the delivery path between origination and final delivery.

Google — Requirements for bulk senders (5,000+/day)

Подпись DKIM auth.dkim

DKIM подписывает части письма закрытым ключом, а открытый публикует в DNS. Мы проверяем каждую подпись, которую несёт письмо, и показываем подписывающий домен, селектор и длину ключа.

Если не прошло: Включите DKIM на стороне платформы отправки и опубликуйте ключ, который она выдаст. Берите 2048 бит; 1024 ещё проверяются, но доживают последние годы.

Стоит до 18 баллов из 100 по нашей оценке и до 1 из 10 по классической.

RFC 6376 §3.5 — The DKIM-Signature Header Field

The signature of the email is stored in the DKIM-Signature header field.

RFC 6376 §6.1 — Extract Signatures from the Message

Verifiers MUST NOT attribute ultimate meaning to the order of multiple DKIM-Signature header fields.

Google — Turn on DKIM for your domain

Google — Requirements for bulk senders (5,000+/day)

Выравнивание DKIM auth.dkim_alignment

Действительной подписи для DMARC мало. Подписывающий домен должен совпасть с доменом из From, точно или по организационному домену, в зависимости от политики, которую вы опубликовали.

Если не прошло: Подписывайте своим доменом, а не доменом платформы. Почти все платформы это умеют и называют его аутентифицированным или собственным доменом отправки.

Стоит до 10 баллов из 100 по нашей оценке и до 1 из 10 по классической.

RFC 7489 §3.1.1 — DKIM-Authenticated Identifiers

DMARC permits Identifier Alignment, based on the result of a DKIM authentication, to be strict or relaxed.

Google — Add a DMARC record

Google — Requirements for bulk senders (5,000+/day)

Результат DMARC auth.dmarc

DMARC связывает SPF и DKIM с доменом, который видит читатель, и говорит принимающей стороне, что делать, если ни один не выровнен. Мы показываем опубликованную политику и то, удовлетворило ли ей это письмо.

Если не прошло: Опубликуйте запись DMARC. Начните с p=none, недели три почитайте отчёты, а потом переходите на quarantine, когда станет понятно, кто ещё отправляет от вашего имени.

Стоит до 14 баллов из 100 по нашей оценке.

RFC 7489 §6.6.2 — Determine Handling Policy

DMARC evaluation can only yield a "pass" result after one of the underlying authentication mechanisms passes for an aligned identifier.

RFC 7489 §6.3 — General Record Format

DMARC records follow the extensible "tag-value" syntax for DNS-based key records defined in DKIM [DKIM].

Google — Requirements for bulk senders (5,000+/day)

Yahoo — Sender requirements and recommendations

Sender ID auth.sender_id

Та же проверка, что и SPF, но по домену из заголовка From, а не из конверта. Вопрос она задаёт другой, и вопрос этот про домен, который видит читатель. Письмо спокойно проходит SPF по конверту в ситуации, когда видимый домен не ручается ни за кого.

Если не прошло: Опубликуйте SPF для домена в вашем From, а не только для bounce-домена, который выдала платформа.

Стоит до 5 баллов из 100 по нашей оценке и до 0.5 из 10 по классической.

RFC 4406 §4 — Record Selection

After the above steps, there should be one record remaining and evaluation can proceed.

SPF auth.spf

SPF это DNS-запись со списком серверов, которым можно отправлять от вашего домена. Принимающая сторона берёт адрес из конверта, читает запись этого домена и смотрит, есть ли в ней подключившийся IP. Мы показываем результат и число DNS-запросов, которое понадобилось записи, потому что вычисление обрывается на десятом, а всё, что дальше, засчитывается как постоянная ошибка, а не как успех.

Если не прошло: Опубликуйте запись, где перечислена ваша платформа отправки и больше ничего. Если ваша близка к пределу в десять запросов, разверните ненужные include внутрь (это называют flattening): запись, которая проходит сегодня, начнёт падать, когда провайдер добавит свой собственный include.

Стоит до 18 баллов из 100 по нашей оценке и до 1 из 10 по классической.

RFC 7208 §4.6.4 — DNS Lookup Limits

SPF implementations MUST limit the total number of those terms to 10 during SPF evaluation, to avoid unreasonable load on the DNS. If this limit is exceeded, the implementation MUST return "permerror".

RFC 7208 §2.6 — Results of Evaluation

Section 4 defines check_host(), a model function definition that uses the inputs defined above and the sender's policy published in the DNS to reach a conclusion about client authorization.

Google — Define an SPF record

Google — Requirements for bulk senders (5,000+/day)

Выравнивание SPF auth.spf_alignment

Совпадает ли bounce-адрес с адресом From, который видит читатель. SPF авторизует конверт, и DMARC засчитывает эту авторизацию только тогда, когда оба адреса выровнены.

Если не прошло: Попросите платформу отправки завести bounce-поддомен внутри вашего домена. Если DKIM уже выровнен, дело не срочное, но вы остаётесь без запасного варианта на случай, когда подпись сломается по дороге.

Стоит до 5 баллов из 100 по нашей оценке и до 0.5 из 10 по классической.

RFC 7489 §3.1.2 — SPF-Authenticated Identifiers

In relaxed mode, the [SPF]-authenticated domain and RFC5322.From domain must have the same Organizational Domain. In strict mode, only an exact DNS domain match is considered to produce Identifier Alignment.

RFC 7489 §6.6.2 — Determine Handling Policy

If one or more of the Authenticated Identifiers align with the RFC5322.From domain, the message is considered to pass the DMARC mechanism check.

Google — Add a DMARC record

Google — Requirements for bulk senders (5,000+/day)

Инфраструктура и репутация

Машина и адрес, с которых ушло письмо, и что о них уже думает остальной интернет.

Имя отправителя разрешается infra.a_record

Есть ли вообще адресная запись у того имени, которым сервер представился в HELO.

Если не прошло: Опубликуйте A-запись для имени, которое объявляет ваш сервер.

Стоит до 5 баллов из 100 по нашей оценке и до 3 из 10 по классической.

RFC 5321 §5.1 — Locating the Target Host

If an empty list of MXs is returned, the address is treated as if it was associated with an implicit MX RR, with a preference of 0, pointing to that host.

Google — MX record values and troubleshooting

Блоклисты infra.dnsbl

Числится ли отправляющий IP в тех блоклистах, к которым принимающие стороны реально обращаются. Наш ростер сверяется с документированной тестовой точкой каждой зоны, а не собирается поиском по сети, потому что мёртвая зона отвечает NXDOMAIN, и это читается как «чисто».

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

Стоит до 25 баллов из 100 по нашей оценке и до 3 из 10 по классической.

RFC 5782 §2.1 — IP Address DNSxL

Each IPv4 address listed in the DNSxL has a corresponding DNS entry.

RFC 5782 §5 — Test and Contact Addresses

IPv4-based DNSxLs MUST contain an entry for 127.0.0.2 for testing purposes.

Google — Postmaster Tools: reputation and delivery errors

Google — Email sender guidelines

Имя в HELO infra.helo

Имя, которым отправляющий сервер представляется в начале SMTP-разговора. Оно обязано быть полным доменным именем и обязано разрешаться.

Если не прошло: Задайте почтовому серверу настоящее имя внутри вашего домена, а не идентификатор контейнера и не внутреннее имя.

Стоит до 5 баллов из 100 по нашей оценке.

RFC 5321 §4.1.1.1 — Extended HELLO (EHLO) or HELLO (HELO)

The argument clause contains the fully-qualified domain name of the SMTP client, if one is available.

Google — Email sender guidelines

Google — Requirements for bulk senders (5,000+/day)

MX-запись infra.mx

Может ли домен из вашего From принимать почту. Ответам и отбойникам без неё некуда идти, а фильтры считают дурным знаком отправляющий домен, который сам ничего не принимает.

Если не прошло: Опубликуйте MX для домена, с которого шлёте, даже если он ведёт в ящик, куда вы заглядываете раз в месяц.

Стоит до 5 баллов из 100 по нашей оценке и до 3 из 10 по классической.

RFC 5321 §5.1 — Locating the Target Host

The lookup first attempts to locate an MX record associated with the name.

Google — MX record values and troubleshooting

Обратный DNS infra.rdns

Разрешается ли отправляющий IP обратно в имя хоста и разрешается ли это имя вперёд в тот же самый IP. Смысл именно в круге. Поставить PTR, указывающий куда угодно, легко, а совпавшая пара уже свидетельствует, что адрес ваш.

Если не прошло: Попросите владельца IP выставить PTR на имя, которым вы управляете, и заведите для этого имени A-запись, указывающую обратно.

Стоит до 12 баллов из 100 по нашей оценке и до 1.5 из 10 по классической.

RFC 1912 §2.1 — Inconsistent, Missing, or Bad Data

Make sure your PTR and A records match. For every IP address, there should be a matching PTR record in the in-addr.arpa domain.

Google — Email sender guidelines

Google — Requirements for bulk senders (5,000+/day)

Шифрование транспорта infra.tls

Пришло ли письмо по TLS и с каким шифром. Всё современное договаривается о нём само, и письмо, прилетевшее открытым текстом, кое-что говорит о том, как настроена отправка.

Если не прошло: Включите STARTTLS на отправляющем сервере. Все massовые платформы это уже делают, так что провал здесь обычно означает самописный релей где-то по дороге.

Стоит до 5 баллов из 100 по нашей оценке.

RFC 3207 §2 — STARTTLS Extension

The STARTTLS extension to SMTP is laid out as follows:

Google — Require TLS for secure message transport

Google — Requirements for bulk senders (5,000+/day)

Спам-движки

Что о письме думают независимые контентные фильтры. Два движка, а не один, потому что оценка одного движка — это мнение одного движка.

ИИ-судья spam.ai_judge

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

Если не прошло: Сам по себе только детализация. Его оценка входит в общий вердикт ниже.

Показывается для детализации. В оценку не входит.

Общий вердикт spam.panel

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

Если не прошло: Разбирайтесь с отдельными находками. Эта строка сдвинется вместе с ними.

Стоит до 25 баллов из 100 по нашей оценке.

Google — Why Gmail marks messages as spam

How this score is calculated

Postmark SpamCheck spam.postmark

Третье мнение, по умолчанию выключенное. Его эндпоинт принимает письмо целиком, а отредактировать его без потери смысла проверки нельзя, так что включение означает согласие на то, что каждое проверенное письмо копируется третьей стороне.

Если не прошло: Делать нечего. Когда он выключен, проверка так и пишет, что выключен, а это не то же самое, что «прошло».

Показывается для детализации. В оценку не входит.

Rspamd spam.rspamd

Второй, независимо написанный фильтр. Он расходится со SpamAssassin достаточно часто, чтобы его стоило спрашивать, и ради этого он здесь и стоит.

Если не прошло: Только детализация. Мнение этого движка входит в общий вердикт, а отдельной оценки не даёт.

Показывается для детализации. В оценку не входит.

SpamAssassin spam.spamassassin

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

Если не прошло: Читайте сработавшие правила, а не сумму. Большинство из них снимается дёшево, стоит только увидеть, какие именно сработали.

Стоит до 3 из 10 по классической.

Google — Why Gmail marks messages as spam

Apache SpamAssassin — rule documentation

Содержимое

Само письмо: структура, ссылки, картинки — то, что фильтр читает перед тем, как решить.

Alt у картинок content.alt_attributes

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

Если не прошло: Пишите alt, который несёт смысл, и никогда не оставляйте без него главную иллюстрацию.

Стоит до 4 баллов из 100 по нашей оценке и до 0.5 из 10 по классической.

Google — Email sender guidelines

Script и iframe content.forbidden_tags

Есть ли в HTML теги, которые ни один почтовый клиент не выполнит. В лучшем случае их вырежут, в худшем сочтут попыткой обхода.

Если не прошло: Уберите script, iframe, object и embed. Всё интерактивное живёт за ссылкой.

Стоит до 10 баллов из 100 по нашей оценке и до 1 из 10 по классической.

Google — Email sender guidelines

Баланс текста и разметки content.html_text_ratio

Сколько в письме разметки против того, сколько читаемого текста. Страница разметки, обёрнутая вокруг одного предложения, даёт форму, которую фильтры узнают.

Если не прошло: Напишите текстовую часть, которая говорит то же, что и HTML, а не заглушку.

Стоит до 3 баллов из 100 по нашей оценке и до 0.3 из 10 по классической.

RFC 2046 §5.1.4 — Alternative Subtype

Systems should recognize that the content of the various parts are interchangeable.

Google — Why Gmail marks messages as spam

Текстовая и HTML-версии content.html_version

Несёт ли письмо текстовую альтернативу рядом с HTML. Часть фильтров взвешивает её отсутствие, и любая программа чтения с экрана хочет именно её.

Если не прошло: Отправляйте multipart/alternative с настоящей текстовой версией, а не с пустой частью и не со строкой «смотрите в браузере».

Стоит до 5 баллов из 100 по нашей оценке.

RFC 2046 §5.1.4 — Alternative Subtype

The "multipart/alternative" type is syntactically identical to "multipart/mixed", but the semantics are different. In particular, each of the body parts is an "alternative" version of the same information.

Google — Email sender guidelines

Размер HTML content.html_weight

Насколько велика HTML-часть. Gmail обрезает письмо примерно после 102 КБ и прячет остаток за ссылкой, унося с собой и футер с отпиской.

Если не прошло: Почистите инлайновый CSS и повторяющиеся блоки стилей. Большинство шаблонов укладывается в треть лимита, стоит только выкинуть неиспользуемые правила.

Стоит до 3 баллов из 100 по нашей оценке и до 0.3 из 10 по классической.

Google — Email sender guidelines

Вес картинок content.images_weight

Суммарный объём изображений, которые тянет письмо. Тяжёлые картинки делают письмо медленным на телефоне, а письмо из одних картинок даёт форму, к которой фильтры относятся с подозрением.

Если не прошло: Сожмите их и убедитесь, что письмо читается с отключёнными изображениями.

Стоит до 3 баллов из 100 по нашей оценке и до 0.3 из 10 по классической.

Google — Email sender guidelines

Сканирование вложений content.malware

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

Если не прошло: Если сработало, перестаньте отправлять и выясните, что происходит на машине, которая собирала письмо.

Стоит до 60 баллов из 100 по нашей оценке.

Google — Why Gmail marks messages as spam

ClamAV — how detection works

Прехедер content.preheader

Строка предпросмотра, которую клиент показывает рядом с темой. Без неё показывается то, что идёт в теле первым, а это обычно ссылка «смотреть в браузере».

Если не прошло: Добавьте скрытый блок прехедера первым элементом тела.

Стоит до 2 баллов из 100 по нашей оценке.

Google — Email sender guidelines

Тема письма content.subject

Длина, регистр и те шаблоны, которые фильтры считают. Мы меряем раскодированную тему, поэтому кириллическая или иероглифическая строка оценивается как текст, а не как своя кодировка.

Если не прошло: Держитесь примерно в 60 символах, уберите крик капсом и восклицательные знаки.

Стоит до 3 баллов из 100 по нашей оценке.

RFC 5322 §2.2 — Header Fields

Header fields are lines beginning with a field name, followed by a colon (":"), followed by a field body, and terminated by CRLF.

RFC 2047 §2 — Syntax of encoded-words

An 'encoded-word' is defined by the following ABNF grammar.

Google — Why Gmail marks messages as spam

Сокращённые ссылки content.url_shortener

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

Если не прошло: Ставьте ссылки на свой домен или используйте трекинговый домен платформы на поддомене вашего.

Стоит до 5 баллов из 100 по нашей оценке и до 0.5 из 10 по классической.

Google — Why Gmail marks messages as spam

Правила для массовых отправителей

Требования, которые Gmail и Yahoo публикуют для тех, кто шлёт объёмом. Применяются к рассылкам и пропускаются для писем, которые на рассылку не похожи.

Политика DMARC опубликована compliance.dmarc_present

Публикует ли домен из From запись DMARC вообще, отдельно от вопроса, прошло ли её это письмо. Gmail и Yahoo требуют её от массовых отправителей.

Если не прошло: Опубликуйте запись. Для выполнения требования хватает p=none, и она сразу даст отчёты, с которыми можно работать.

Стоит до 6 баллов из 100 по нашей оценке.

RFC 7489 §6.3 — General Record Format

p: Requested Mail Receiver policy (plain-text; REQUIRED for policy records).

Google — Requirements for bulk senders (5,000+/day)

Yahoo — Sender requirements and recommendations

List-Unsubscribe compliance.list_unsubscribe

Несёт ли письмо заголовок отписки, на который почтовый клиент может нажать. Gmail и Yahoo требуют его от массовых отправителей, и за его отсутствие фильтруют независимо от всего прочего.

Если не прошло: Добавьте заголовок "List-Unsubscribe" с HTTPS-адресом. Это умеет любая платформа отправки.

Стоит до 10 баллов из 100 по нашей оценке и до 1 из 10 по классической.

RFC 2369 §3.2 — List-Unsubscribe

The List-Unsubscribe field describes the command (preferably using mail) to directly unsubscribe the user (removing them from the list).

Google — Requirements for bulk senders (5,000+/day)

Yahoo — Sender requirements and recommendations

Отписка в один клик compliance.one_click_unsubscribe

Форма построже, где нужен HTTPS-адрес, заголовок "List-Unsubscribe-Post" и одна действительная подпись DKIM, накрывающая оба заголовка. Всё три, иначе принимающая сторона кнопку не покажет.

Если не прошло: Обычно теряется как раз подпись: платформы подписывают "List-Unsubscribe" и забывают про "List-Unsubscribe-Post". Оба имени должны стоять в теге h= одной и той же подписи.

Стоит до 8 баллов из 100 по нашей оценке.

RFC 8058 §4 — Additional Requirements

The List-Unsubscribe and List-Unsubscribe-Post headers MUST be covered by the signature and included in the "h=" tag of a valid DKIM-Signature header field.

RFC 8058 §3.1 — Mail Senders

The List-Unsubscribe header field MUST contain one HTTPS URI.

Google — Requirements for bulk senders (5,000+/day)

Yahoo — Sender requirements and recommendations

TLS для массовой почты compliance.tls_required

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

Если не прошло: Смотрите проверку шифрования транспорта выше.

Стоит до 5 баллов из 100 по нашей оценке.

Google — Require TLS for secure message transport

Google — Requirements for bulk senders (5,000+/day)

Рекомендации

Сделать стоит, в оценку не входит. Ничто в этом разделе не может стоить баллов, и это продуктовое решение, закреплённое тестом.

BIMI advisory.bimi

Публикует ли домен запись BIMI, которая ставит логотип рядом с вашими письмами в некоторых клиентах. Ей нужна принуждающая политика DMARC и проверенный сертификат марки, который стоит денег.

Если не прошло: Стоит делать, когда DMARC уже на quarantine или reject, а объёмы оправдывают сертификат.

Рекомендация. Баллов не стоит.

BIMI — draft specification, not yet an RFC

Возраст и длина ключа DKIM advisory.dkim_key_rotation

Длина подписывающего ключа и то, сколько он уже в работе. Короткие ключи с каждым годом дешевле атаковать офлайн.

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

Рекомендация. Баллов не стоит.

RFC 8301 §3.2 — Key Sizes

Since short RSA keys more easily succumb to off-line attacks, Signers MUST use RSA keys of at least 1024 bits for all keys. Signers SHOULD use RSA keys of at least 2048 bits.

Google — Turn on DKIM for your domain

DNSSEC advisory.dnssec

Подписан ли домен. SPF, DKIM и DMARC живут в DNS, так что тот, кто умеет подделывать ответы DNS, подделает и все три сразу.

Если не прошло: Включите у регистратора. Обычно это один переключатель, остальное регистратор делает сам.

Рекомендация. Баллов не стоит.

RFC 4033 §2 — Definitions of Important DNSSEC Terms

Authentication Chain: An alternating sequence of DNS public key (DNSKEY) RRsets and Delegation Signer (DS) RRsets

MTA-STS advisory.mta_sts

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

Если не прошло: Опубликуйте TXT-запись и файл политики по HTTPS. Работы на полдня, а закрывается атака с понижением шифрования.

Рекомендация. Баллов не стоит.

RFC 8461 §3 — Policy Discovery

To discover if a recipient domain implements MTA-STS, a sender need only resolve a single TXT record.

Отчёты о TLS advisory.tls_rpt

Просит ли домен присылать отчёты, когда кому-то не удалось доставить ему по TLS. Идёт в паре с MTA-STS, потому что политика без отчётности не даёт понять, работает ли она.

Если не прошло: Добавьте TXT-запись с адресом, куда будут приходить ежедневные отчёты.

Рекомендация. Баллов не стоит.

RFC 8460 §3 — Reporting Policy

A domain publishes a record to its DNS indicating that it wishes to receive reports.