Я полагаю, что вы смешиваете две проблемы здесь, на самом деле они совершенно не связаны.
Первая проблема - убедиться, что письмо было принято корпоративным почтовым сервером (в данном случае это пересылка почты). Чтобы решить эту проблему, вы можете либо создать локальную очередь сообщений (сохранить их в базе данных, на сервере очередей и т. Д.) - и отправить их отдельным рабочим процессом, который извлечет каждое сообщение из очереди, попытается доставить и удалить его. только если это было принято почтовым релеем.
Или, если вам не требуется низкоуровневое ручное управление процессом, вы можете настроить на своей машине простой локальный почтовый сервер, и вместо этого, если вы отправляете электронные письма прямо на ваш корпоративный почтовый ретранслятор, просто отправляйте их на локальный почтовый сервер. Затем он удостоверится в том, что письма были доставлены в корпорацию должным образом.
Но в обоих случаях вы не получите никакой информации о том, куда сообщение было доставлено конечному получателю - например, был ли адрес электронной почты действительным, почтовый ящик пользователя не был заполнен и т. Д.
Вторая проблема - отследить ошибки доставки почты. Чтобы правильно и полностью решить эту проблему, вам нужно отловить всю почту, возвращенную вам с удаленных серверов, и проанализировать ее, так как многие ошибки на данный момент неизвестны. когда электронное письмо отправлено - но они возвращаются позже в виде почтовых отказов. Если вы поймете и отследите эти отскоки, вы сможете обнаружить такие ошибки, как полные почтовые ящики, недействительные электронные письма, просто временные сбои доставки и т. Д.
Это то, как это делается в программном обеспечении для управления списками рассылки - например, phpList работает точно так же.