Расшифровка статусов SMTP
Анализатор кодов отказа email
Извлекайте стандартные трёхзначные и расширенные коды состояния из диагностического сообщения сервера и отделяйте временные ответы от постоянных, не придумывая причину.
Расширенные коды состояния
Коды вида 5.1.1 или 4.2.2 состоят из трёх частей: класс, тема и детализация. Первая цифра означает успех (2), устойчивую временную ошибку (4) или постоянную ошибку (5). Остальные цифры уточняют категорию.
Осторожно с текстом получающего сервера
Диагностический текст формирует получающая система, и он бывает разным. Сохраняйте исходное событие для поддержки, но не делайте на основании одного ответа выводов о качестве адреса или доставляемости за пределами этой конкретной попытки доставки.
Выбирайте стратегию повторов осознанно
Временные ответы ставьте в очередь и повторяйте с ограниченной экспоненциальной задержкой. Постоянные ответы, как правило, не следует повторять без изменений. Добавляйте получателей в стоп-лист только по задокументированной политике и сохраняйте безопасный путь для ручной проверки неоднозначных ответов провайдера.
Вопросы об этом инструменте
Любой ответ 550 означает несуществующий адрес?
Нет. 550 — постоянный ответ SMTP, но его причина может быть связана с адресацией, политикой, содержимым, аутентификацией или другим условием. Ориентируйтесь на расширенный код и текст сервера.
Нужно ли повторять отправку после ответа 4xx?
Это класс временных ошибок, поэтому ограниченное число повторов может быть уместно. Соблюдайте рекомендации провайдера по повторам и не создавайте дублирующиеся задачи в приложении.
Доказывает ли отказ, что адреса никогда не существовало?
Нет. Он фиксирует лишь результат, который получающая система выдала для конкретной попытки в конкретный момент.