Я не знаком с PHPMailer, но вам, безусловно, нужна поддержка библиотеки, чтобы иметь возможность запрашивать ее о состоянии отправляемых писем.
Учитывая, что в PHP нет потоков, я бы предложил иметь очередь базы данных для поставок и иметь внешний процесс PHP, запускаемый с основного сайта (или через cron), который обрабатывает поставки на стороне, отмечая в базе данных текущий статус каждой доставки: NOT_PROCESSED, IN_PROGRESS, CONNECTING, CONNECTED, SENDING_DATA, ACCEPTED, FAILURE_X. Вы можете запросить базу данных о состоянии каждой доставки через Ajax.
Если PHPMailer внутренне использует стандартную функцию PHP mail (), которая использует SMTP-сервер ретрансляции на вашем компьютере, вы не можете иметь столько информации о состоянии (которую вы получили бы, если бы вы сами создали сокеты), вы можете просто три основных состояния: NOT_PROCESSED, IN_PROGRESS, FAILURE_X.
(FAILURE_X действительно представляет много состояний, поскольку объясняет причину сбоя).
Последнее замечание по использованию mail () заключается в том, что статус, который вы сможете узнать, - это просто статус от локального SMTP-ретранслятора, который всегда будет принимать очень быстро, и вы не сможете определить, почта действительно доставлялась на исходящий сервер (по крайней мере, не связываясь с ним или не читая mailq, что неприятно делать).
1012 * ОТКАЗ *
Учитывая, что даже в хорошем случае, когда вы на самом деле знаете статус, вы не можете знать, было ли получено письмо на другом конце, и сколько времени это займет, я не уверен, насколько полезна такая конструкция быть. Программирование, конечно, было бы забавно, но я сомневаюсь, что это было бы действительно полезно, может быть, просто было бы немного конфет со стандартными заявлениями об отказе от электронной почты (электронные письма могут быть потеряны при передаче, если не удается повторить попытку, оставьте некоторое время перед повторной попыткой), будет достаточно .