Очередь электронной почты в php

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
5 805
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

Я вообще полагался на хакерство. У меня есть список адресов электронной почты в базе данных, а затем я использую мета-перенаправление на себя с увеличивающимся параметром «смещение», который указывает, к какой строке в базе данных я работаю. Перенаправления сервера вызывают проблемы, потому что браузеры предполагают, что затраченное время указывает на бесконечный цикл.

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

если какие-либо электронные письма поставлены в очередь (и электронное письмо не настроено для каждого получателя), я бы затем сгруппировал электронные письма по домену и отправил блоки вместе, чтобы уменьшить общее количество писем, которые должны быть отправлены, т.е. если у вас есть 1000 писем в очереди и 250 для учетных записей Gmail, я бы отправил 250 в 25 блоках по 10 (помните, что получатели скрытой копии, чтобы они не видели друг друга).

для фактической отправки почты я бы использовал ГРУША почта поверх функции php mail ()

после отправки электронного письма удалите запись (ы) из очереди или измените флаг состояния, чтобы показать, что он был отправлен, и цикл - я бы также добавил счетчик для отслеживания писем, которые не удалось отправить, и удалить их после x неудачных попыток

чтобы преодолеть проблемы с тайм-аутом, я бы тоже (в зависимости от ситуации) - установить set_time_limit () на x секунд и отслеживать время выполнения скрипта (убивая скрипт через (x-1) секунд) - вызвать скрипт из командной строки, чтобы избежать тайм-аутов - установить ограничение на количество писем, которые скрипт может отправить за одно выполнение

Конечно, таблица базы данных может быть идеальной. Но как насчет отправки 1000 писем с вложением 2 МБ? это тоже нужно принять во внимание. У меня самого была проблема, и я в конце концов прибег к записи электронной почты в базу данных, а файлы в файловую систему. Сценарий электронной почты, который я использовал, затем прочитал записи базы данных и попытался получить вложения для отправки.

Для этого есть проверенное решение: PEAR Mail_Queue

У меня отлично работает.

Я использовал это, чтобы ставить в очередь более 30 000 писем за раз. Достаточно простой скрипт отправляет около 250 сообщений за раз - если средняя загрузка не слишком высока. Быстрее их не отправишь, но он сделает это без проблем.

Alister Bulman 17.09.2008 02:27

Вы уверены, что вам нужно поставить эту почту в очередь?

Просто доставьте всю почту агенту пересылки почты на локальном компьютере (sendmail ...), и пусть он позаботится об организации очереди и отправке. В конце концов, для этого и было задумано.

Другими словами: не беспокойтесь об этом!

если вы доставляете пару десятков, это не проблема. Sendign тысяч электронных писем запустит новый процесс sendmail для всех - а затем вы получите большие средние нагрузки, которые поставят сервер на колени. У меня Pear_Mail_Queue'd 50000+ без проблем

Alister Bulman 23.09.2008 16:16

Я попробовал это и обнаружил, что sendmail начинает давать длинные паузы - см. serverfault.com/questions/551649/sendmail-slow-to-accept-ema‌ ils

Rich 12.11.2013 15:28

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

Электронная очередь доступна здесь: https://github.com/tin-cat/emailqueue

И есть также версия Docker, которая позволяет настроить рабочий сервер очереди электронной почты всего за несколько минут, здесь: https://github.com/tin-cat/emailqueue-docker

Другие вопросы по теме