Я не знаком с 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, что очень неприятно).
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Учитывая, что даже в хорошем случае, когда вы действительно знаете статус, вы не можете знать, было ли электронное письмо получено на другом конце, и сколько времени это займет, я не уверен, насколько полезна такая конструкция. Это, безусловно, было бы весело программировать, но я сомневаюсь, что это было бы действительно полезно, может быть, было бы достаточно просто немного глазного леденца со стандартными заявлениями об отказе от электронной почты (электронные письма могут быть потеряны в пути, если это не удается, повторите попытку, оставьте когда-нибудь перед повторной попыткой) .
person
Vinko Vrsalovic
schedule
20.08.2009