Появилась вот задача: определять что письмо отправленное по электронной почте дошло до адреса.
Следует сразу сказать что SMTP никому и ничего не гарантирует. Но есть пути все таки определить что письма доходят или не доходят.
С самого начала принимаем версию о том что все письма доходят до получателей.
1. Если во время доставки произошли какие-то ошибки, то большинство почтовых серверов генерируют оповещение об ошибке и отсылают его отправителю письма. Значит вполне можно обрабатывать эту почту и определять по каким адресам возникли ошибки.
2. В ESMTP есть возможность использовать Delivery Status Notification (DSN). DSN это уведомление о статусе доставки. Позволяет указать при отправке письма что помимо ошибок мы хотим получить уведомление и о успешной доставке. Если письмо дошло до MTA конечного получателя, то генерируется сообщение-уведомление и посылается отправителю. Аналогично первому пункту можно обрабатывать эту почту и конкретные адреса отмечать как «надежные». Но следует помнить что не все сервера поддерживают эту функцию.
3. Есть такое понятие как подтверждение прочтения. Т.е. в письме указывается заголовок Disposition-Notification-To или Return-Receipt-To с указанием на какой адрес отправить уведомление. Причем первый заголовок прописат в RFC. Второй неоффициален, но поддерживается многими почтовыми клиентами. Эти заголовки обрабатываются почтовым клиентом, который обычно запрашивает у пользователя можно или нет отправить уведомление. Т.е. не дает 100% срабатывания.
4. Есть еще один очень специфический способ — встроить в письмо картинку или какой-то другой элемент, который будет грузится с сервера по уникальному для этого письма URL’у. Из-за настроек безопастности так же ничего не гарантирует.
В общем же случае почти все методы сводятся к разбору почты, которая приходит на тот адрес с которого отправляются письма.