Отправка писем в фоновом режиме без cron - PullRequest
0 голосов
/ 07 сентября 2011

Мне было интересно, есть ли способ запустить цикл PHP, чтобы отправлять несколько сотен писем подписчикам в фоновом режиме.Моя цель - отформатировать рассылку, нажать «Отправить», а затем закрыть браузер или изменить страницу.Конечно, фактический процесс отправки электронной почты будет выполняться в фоновом режиме и не будет прерван закрытием браузера.

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

Я видел эту функциональность в скрипте под названием Pommo(https://github.com/soonick/poMMo) но не могу понять, как это делается.

У кого-нибудь есть идеи для этого?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2011

Вам нужна система очередей. Например, есть Beanstalkd для Linux, который вы бы кормили вещами с помощью php.

0 голосов
/ 07 сентября 2011

Я собирался добавить комментарий к вашему вопросу, но у меня там не было достаточно места, чтобы отформатировать и привести пример.

Вот идея, которая, по моему мнению, может сработать:

1 - Загрузить все электронные письма, которые вы хотите отправить в базу данных или файл.

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

3 - создайте скрипт php, который будет получать запрос Ajax и отправлять все электронные письма в соответствии с заданными вами параметрами.

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

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

Если вы решили реализовать идеи, изложенные выше, пожалуйста, сообщите нам об этом. Мне любопытно, сработает ли это.

Удачи!

0 голосов
/ 07 сентября 2011

Я знаю, что это можно сделать с помощью чтения задания cron из очереди, сохраненной в MySQL или текстовом файле, но таким образом, даже если в течение длительного времени нет очереди, cron всегда будет работать, смотрядля очереди ...

Это в значительной степени превосходит цель Крона.Вы должны создать задание, которое запускается, скажем, каждые 15 минут и проверяет очередь на наличие писем, которые необходимо отправить.Если почты нет, пусть скрипт умирает, он будет запущен снова через 15 минут.

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

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