Можно ли отправлять почту асинхронно с помощью PHP, оставляя отзывы пользователей о доставке? - PullRequest
2 голосов
/ 21 августа 2009

Можно ли отправлять почту асинхронно с помощью PHP, оставляя отзыв о доставке в реальном времени?

Недавно я написал небольшое приложение для внутренней сети нашей компании для отправки отформатированных писем клиентам. Интерфейс довольно чистый и требует только ввода номера задания, затем он создает и отправляет почту. Почта, будучи построенной, получает несколько вложений с другого сервера, и все автоматизировано. Используемая библиотека: PHPMailer .

Есть ли способ, используя другие технологии, возможно, но все еще использующий PHP в качестве основного языка, чтобы показать прогресс отправляемых писем? Я кодировал надежную проверку ошибок, чтобы проверить, действительно ли почта была отправлена ​​и т. Д., Но мне не хватает способа дать пользователям визуальный ключ к фактической доставке почты на сервер через индикатор выполнения и т. Д.

Возможно ли это с помощью PHP и чего-то вроде Ajax? Как бы вы определили ход почты в пути?

Ответы [ 4 ]

5 голосов
/ 21 августа 2009

Я не знаком с 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 * ОТКАЗ *

Учитывая, что даже в хорошем случае, когда вы на самом деле знаете статус, вы не можете знать, было ли получено письмо на другом конце, и сколько времени это займет, я не уверен, насколько полезна такая конструкция быть. Программирование, конечно, было бы забавно, но я сомневаюсь, что это было бы действительно полезно, может быть, просто было бы немного конфет со стандартными заявлениями об отказе от электронной почты (электронные письма могут быть потеряны при передаче, если не удается повторить попытку, оставьте некоторое время перед повторной попыткой), будет достаточно .

0 голосов
/ 24 мая 2012

Я предполагаю, что у нас есть шанс завершить его, но я не могу быть уверен, что это решение уже кем-то сделано: (.

Мои мысли:

насколько я знаю, вы можете работать с сокетом в неблокирующем режиме stream_set_blocking () тогда вы можете попытаться использовать этот подход для отправки электронных писем через неблокирующий сокет.

0 голосов
/ 21 августа 2009

Если ваша электронная почта может отправлять информацию обратно, возможно, будет возможно обновить индикатор выполнения или текст выполнения с сообщениями.

Это похоже на то, как Wordpress обновляет / устанавливает работу. Когда процесс завершен, на каждом шаге отображается текст: «Загрузка xxxx.xxx.xxx», «Деактивация плагина», «Установка плагина», «Попытка реактивации», Реактивация успешна »: что-то похожее. клиентская сторона и отправитель сообщений на сервере: при выполнении сценария он отправляет обратно сообщения клиенту.

Как уже говорилось ранее, это может реально дойти до вашего сервера. Вы можете указать, успешно ли почта ушла с вашего сервера, но без какого-либо шага согласования с получателем электронной почты, я думаю, это далеко, насколько вы можете пройти.

0 голосов
/ 21 августа 2009

Я думаю, что лучший вариант здесь - оценить время. Вы можете проверить, сколько времени занимает отправка писем по 10 МБ, чтобы узнать скорость получения вашего SMTP-сервера. С помощью этой информации вы можете оценить время передачи любого электронного письма в зависимости от его размера и на этом отвлечь вашего клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...