Как определить адрес электронной почты получателя неверно при отправке нескольких писем - PullRequest
1 голос
/ 16 марта 2020

Я написал код для отправки нескольких электронных писем, используя python (используя модули smtplib, ssl). У меня есть файл CSV, откуда я читаю электронные письма и отправляю сообщение по одному. Теперь мой запрос: если случайно один или несколько писем введены неправильно (внутри CSV-файла), есть ли способ получить сообщение в моей консоли , которое сообщение не было отправлено из-за неправильного адреса электронной почты .

1 Ответ

0 голосов
/ 16 марта 2020

Это не тривиально. Ошибки доставки, вызванные неверным адресом получателя, могут возникать на нескольких этапах доставки:

Самый простой случай - сбой доставки уже в диалоге SMTP. В этом случае можно просто проверить состояние команды SMTP RCPT TO, что отражено в исключении SMTPRecipientsRefused . Но в большинстве случаев это произойдет, если вы будете взаимодействовать с SMTP-сервером, ответственным за домен получателя.

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

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

Чтобы обойти эту проблему, можно использовать уникальный адрес отправителя для каждого адреса получателя, то есть что-то вроде bounce-foo-at-example.com@yourdomain. Конечно, тогда вам нужно будет собрать все письма, отправленные на bounce-*@yourdomain. См. Также Схема перезаписи отправителей .

...