Вам, вероятно, придется угадывать количество времени, которое требуется, и обновлять индикатор выполнения, основываясь на этом.
Учитывая, что в 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.
Возможно ли отправлять почту асинхронно с использованием PHP, давая пользователюОтзыв о доставке?
В противном случае, возможно, вы сможете обновить индикатор выполнения после каждого маленького шага.Нечто подобное:
- Установить получателя почты
- индикатор выполнения обновления 25%
- Установить почту с адреса
- индикатор выполнения обновления 50%
- установка заголовков почты
- индикатор выполнения обновления 75%
- отправка почты
- обновить индикатор выполнения до 100%
Это, однако, действительно неэффективно .. И конечным результатом, вероятно, будет то, что пользователь увидит, как индикатор выполнения очень быстро прыгнет через первоетри (25%, 50%, 75%), а затем застряли на 75% в течение дополнительной секунды или двух, а затем сделать это ..