Создание очереди электронной почты в PHP? - PullRequest
6 голосов
/ 14 декабря 2011

В настоящее время я создаю систему котировок, которая работает следующим образом:

Пользователь отправляет данные через форму -> данные отправляются в БД -> генерируется PDF -> электронная почта отправляется

Я использую библиотеку htmlmimemail5 для этого, и сгенерированное письмо отправляется на почтовый обмен на отдельном сервере в локальной сети.

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

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

Это приложение с радостью будет работать в очереди электронной почты, которая была создана из запросов пользовательских процессов, и, если очередь пуста, возможно, будет закрыта?

Я предполагаю, что это должен быть какой-то видочереди электронной почты (например, очереди печати).

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

Дополнительная информация:

  • Сервер является тюрьмой BSD
  • Apache 2.2 / PHP5

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

Любые идеи и предложения приветствуются!:)

Ответы [ 2 ]

15 голосов
/ 14 декабря 2011

Да, это довольно просто реализовать. Вместо немедленной отправки сохраните данные электронной почты в базе данных. Иметь скрипт (работающий каждую минуту с помощью cron или, что еще лучше, демонизированный PHP-скрипт ), который принимает сообщения из очереди и отправляет их.

Убедитесь, что в вашей базе данных есть флаги для обозначения прогресса, то есть столбец для «отправки» и один для «отправлено», так что ваш сценарий знает, что не нужно пытаться повторно отправить тот, который уже находится в процессе отправки. 1005 *

2 голосов
/ 14 декабря 2011

Запустите локальный MX, который будет получать только с локального хоста и переведет на «настоящий» MX.

...