Краткий ответ:
Вы не можете сделать это простым способом, а не в своем приложении.
Длинный ответ:
Вы должны обрабатывать это асинхронно и вне вашего php-приложения (по крайней мере, частично). Прежде всего вы должны настроить адрес возврата примерно на sender+recipient=recipientdomain.com@senderdomain.com
, как в TimB answer . В этот момент все уведомления, отправленные получающим сервером smtp, будут отправляться на этот адрес.
Затем вам нужно настроить демон smtp на senderdomain.com
почтовый обменник для обработки такого рода рикошетов и обработки их в каком-то канале.
С помощью канала вы можете переслать возвращенное сообщение во внешнюю программу, которая анализирует сообщение и извлекает необходимую информацию (т. Е. Причину сбоя доставки)
В этот момент в вашей программе (которая может быть сценарием cli в вашем приложении) вы можете пометить адрес как ошибочный и при необходимости записать причину.
Это довольно сложная задача, которую нельзя выполнить в простом приложении. Обычно я использую специальное программное обеспечение для обработки больших списков рассылки, такое как sympa , которое позаботится об этой задаче.
В противном случае вы можете использовать внешнюю службу доставки, такую как Sendgrid , которая сделает за вас грязную работу и сообщит о сбойных адресах с помощью простого API. В качестве бонуса с этим решением они находятся в белых списках всех основных поставщиков, поэтому ваша электронная почта не будет помечена как спам, если вы соблюдаете некоторые простые правила (например, удаление перенаправляющих адресов и использование политики согласия для ваших бюллетень)