Очередь писем в php

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

20.08.2008 08:38:24
7 ОТВЕТОВ
РЕШЕНИЕ

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

5
20.08.2008 08:46:49

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

0
20.08.2008 09:02:59

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

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

чтобы на самом деле отправлять почту, я бы использовал PEAR почту через функцию php mail ()

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

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

1
20.08.2008 09:41:53

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

1
20.08.2008 09:48:43

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

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

2
20.08.2008 10:03:29
Я использовал это, чтобы поставить в очередь более 30000 писем одновременно. Довольно простой скрипт отправляет около 250 раз - если средняя нагрузка не слишком высокая. Вы не отправите их быстрее, но это будет сделано без проблем.
Alister Bulman 16.09.2008 22:27:28

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

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

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

1
22.08.2008 14:08:36
если вы доставляете пару десятков, это не проблема. Отправка тысяч электронных писем ускорит новый процесс sendmail для всех - и тогда вы получите большие средние нагрузки, которые ставят сервер на колени. У меня Pear_Mail_Queue'd 50000+ без проблем
Alister Bulman 23.09.2008 12:16:33
Я попробовал это и обнаружил, что sendmail начинает давать длинные паузы - см. Serverfault.com/questions/551649/sendmail-slow-to-accept-emails
Rich 12.11.2013 11:28:57

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

Адрес электронной почты доступен здесь: https://github.com/tin-cat/emailqueue

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

0
13.01.2020 08:15:23