Отправка массовых писем из PHP - PullRequest
5 голосов
/ 05 апреля 2010

У меня есть 80 000 пользователей на моем сайте, и я недавно отвернулся от используемого мной скрипта форума и создал что-то очень простое, которое работает так же хорошо (скрипт форума был слишком раздутым и требовал значительных ресурсов мой простой сайт)

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

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

Однако я просмотрел всю документацию и не вижу, как отправить «100 за раз», и я не уверен, как это сделать.

Проще говоря. У меня есть админ-панель с формой с двумя входами «тема» и «сообщение». Когда я нажимаю «Отправить», какой самый безопасный способ отправить 80 000 электронных писем, не нарушая работу моего сервера и не помечая их как спам?

Я на довольно мощном выделенном сервере, поэтому у меня нет проблем, связанных с общими серверами.

Заранее спасибо за любой совет!

Ответы [ 4 ]

1 голос
/ 05 апреля 2010

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

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

0 голосов
/ 03 января 2015

Вместо Cron вам понадобится для этого процесс демона, и Swiftmailer не может легко это сделать. Проблема заключается в следующем: у вас может быть триггер Cronjob, который Swiftmailer позволяет произносить каждые 5 минут, но что будет, если он еще не завершит отправку 10000 писем? он, вероятно, запустит другой процесс, так что вы можете столкнуться с множеством процессов, пытающихся отправить те же файлы в очередь.

Я использую обходной путь и создал простой демон PHP (скрипт bash тоже подойдет), который постоянно проверяет, есть ли в очереди электронные письма; если это так, он запускает Swiftmailer и отправляет 1 электронное письмо. (установите ограничение swiftmailer равным 1). Затем демон-скрипт ждет 0,5 секунды и снова проверяет.

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

К сожалению, у Swiftmailer нет папки 'send /', поэтому после отправки они исчезают. Таким образом, в случае ошибки вы не можете просто переместить файлы из «send /» обратно в очередь для повторной отправки.

0 голосов
/ 05 апреля 2010

Вот моя идея ... Предполагается, что вы размещены на коробке типа linux.Это, конечно, в минимуме, не зная вашего кода.Создайте файл на сервере с именем sendmails.php

<? 
loop through email addresses however you do it
{
 usleep(250000); // sleep for quarter of a second 
 mail('user@example.com', 'My Subject', 'message');
}
?>

Сохраните его, затем в другом файле startemails.php вы можете открыть в своем браузере

<?
system("&php sendmails.php");
?>

Даже если время ожидания сервера истеклоСистемный вызов должен завершить свою работу.80 000 электронных писем должны быть отправлены в течение 6 часов, используя этот метод.Измените время в usleep, чтобы оно заняло больше или меньше времени.

0 голосов
/ 05 апреля 2010

Класс, подобный Swiftmailer , имеет опции для массовой рассылки.

...