Как запланировать уведомления по электронной почте в php - PullRequest
8 голосов
/ 09 марта 2011

Я знаю, как отправлять электронную почту, используя PHPmail. Но что, если мне нужно отправить много писем?

Это может быть «уведомление» для подписчиков сайта при публикации нового сообщения. Выполнение этого непосредственно в обработчике страницы серьезно повлияет на производительность и сделает загрузку браузера слишком медленной. Поэтому мне нужно выполнить эту работу в фоновом режиме.

Как я могу «запланировать» что-то на PHP, в моем случае - отправку электронной почты? Например, в C ++ я бы создал отдельный поток, но в AFAIK нет такой вещи, как многопоточность в PHP.

Ответы [ 7 ]

8 голосов
/ 09 марта 2011

Создать задание CRON, которое отправляет очередь электронной почты, сохраненную в базе данных:

  1. Сохранить письмо со всей информацией в БД.

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

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

3 голосов
/ 09 марта 2011

Для планирования таких вещей лучше всего использовать cronjobs, это определяется на самом сервере вместо PHP.Однако cronjob может вызывать сценарий PHP, который нужно выполнить.
Выполнение этого с помощью cronjob имеет некоторые преимущества, поскольку оно не влияет (напрямую) на производительность конечного пользователя, и вы можете запустить его в определенные моменты времени.

2 голосов
/ 09 марта 2011

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

Альтернативой может быть запуск другого процесса в фоновом режиме, используя что-то вроде: exec('php send_notifications.php 1>/dev/null 2>1 &'); (обратите внимание на материал в конце).

2 голосов
/ 09 марта 2011

Все ваши данные электронной почты хранятся в базе данных Mysql. Структура таблицы может быть как.

TO_EMAIL_ID | EMAIL_TYPE | EMAIL SUBJECT | EMAIL_CONTENT | ОБРАБОТАНО | INSERT_TIME.

вставьте всю вашу электронную почту в эту таблицу. И есть PHP-скрипт, который выбирает данные из этой таблицы и отправляет электронную почту в пакетном режиме, и удаляет / отмечает как обработанные отправленные электронные письма. скажем, файл sendMailers.php Затем вы можете установить задание cron для запуска этого файла каждые 5 минут. см http://www.foogazi.com/2006/12/07/understand-cron-jobs-in-5-minutes/

*/5 * * * * PATH_TO_PHP  sendMailers.php
1 голос
/ 09 марта 2011

Я использую фоновый процесс (программу PHP можно запустить из командной строки, если у вас есть доступ к серверу через CLI [Интерфейс командной строки]). Процесс проверяет таблицу MySql на наличие писем в очереди для отправки.

В моем подходе браузер используется не для отправки электронной почты, а только для записи его в таблицу MySql.

1 голос
/ 09 марта 2011

Вы можете использовать Создать Cron Jobs для этой цели и посмотреть следующее Обсуждение

0 голосов
/ 09 марта 2011

Вам необходимо использовать расписание задач в Windows или задания cron в Unix-подобных ОС (например, linux).

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