Это не тривиально. Ошибки доставки, вызванные неверным адресом получателя, могут возникать на нескольких этапах доставки:
Самый простой случай - сбой доставки уже в диалоге SMTP. В этом случае можно просто проверить состояние команды SMTP RCPT TO
, что отражено в исключении SMTPRecipientsRefused . Но в большинстве случаев это произойдет, если вы будете взаимодействовать с SMTP-сервером, ответственным за домен получателя.
При последующих ошибках доставки конечный SMTP-сервер, столкнувшийся с проблемой, сгенерирует отказное сообщение с уведомлением о состоянии доставки. Чтобы получить их, вам нужно убедиться, что вы указали SMTP-отправителя, которым вы управляете и который на самом деле может получать эти отказные письма, чтобы вы могли собирать эти проблемы с состоянием доставки, анализировать их и извлекать, какой целевой адрес не удался.
Это тоже не тривиально, так как эти сообщения о состоянии доставки могут иметь различные форматы. В большинстве случаев вы можете найти адрес электронной почты получателя где-нибудь внутри письма с уведомлением о состоянии доставки. Но это не всегда работает, так как адрес получателя мог быть переписан в пути.
Чтобы обойти эту проблему, можно использовать уникальный адрес отправителя для каждого адреса получателя, то есть что-то вроде bounce-foo-at-example.com@yourdomain
. Конечно, тогда вам нужно будет собрать все письма, отправленные на bounce-*@yourdomain
. См. Также Схема перезаписи отправителей .