Какой самый правильный способ отправки электронной почты с минимальной 1000 или более в PHP? Любая надежная техника организации очереди на электронную почту, способная справиться с этим?
Вы можете просто вставить свои электронные письма в таблицу базы данных почтовой очереди и выполнить отдельный процесс проверки очереди и пакетной отправки определенного номера сразу.
Я обычно полагался на взломать. У меня есть список адресов электронной почты в базе данных, а затем я использую мета-перенаправление на себя с возрастающим параметром 'offset', который указывает, какая строка в базе данных мне нужна. Перенаправления сервера вызывают проблемы, потому что браузеры предполагают, что затраченное время указывает на бесконечный цикл.
Как предложил Mercutio, я вставляю новую запись в таблицу почтовой очереди для каждого письма, ожидающего отправки, а затем использую отдельный процесс (например, CRON), чтобы периодически проверять таблицу на наличие элементов в очереди.
если какие-либо электронные письма поставлены в очередь (и электронная почта не настроена для каждого получателя), я бы затем сгруппировал электронные письма по доменам и отправил блоки вместе, чтобы уменьшить общее количество электронных писем, которые должны быть отправлены, т.е. если у вас 1000 электронных писем в очереди и 250 для учетных записей Gmail я бы отправил 250 из 25 блоков по 10 (помните, что получатели скрытой копии не должны видеть друг друга).
чтобы на самом деле отправлять почту, я бы использовал PEAR почту через функцию php mail ()
после отправки электронного письма либо удалите записи из очереди, либо измените флаг статуса, чтобы показать, что оно было отправлено, и выполните цикл - я бы также добавил счетчик для отслеживания сообщений, которые не удалось отправить, и удалил их после x неудачных попыток.
чтобы преодолеть проблемы тайм-аута, я бы тоже (в зависимости от ситуации) установил set_time_limit () равным x секундам и отследил время выполнения скрипта (уничтожение скрипта через (x-1) секунд) - вызов скрипта из команды строка, чтобы избежать тайм-аутов - установить ограничение на количество писем, которые скрипт может отправить за одно выполнение
Конечно, таблица базы данных может быть идеей. Но как насчет отправки 1000 электронных писем с вложением 2 Мб? Вы должны принять это во внимание также. У меня возникла проблема, и я в итоге прибег к записи электронной почты в базу данных и файлов в файловую систему. Сценарий электронной почты, который я использовал, затем прочитал записи базы данных и попытался извлечь вложения для отправки.
Для этого есть проверенное решение: PEAR Mail_Queue
У меня отлично работает.
Вы уверены, что вам нужно сделать эту почту в очереди самостоятельно?
Просто доставьте всю почту агенту пересылки почты на локальном компьютере (sendmail ...) и пусть он позаботится об организации очереди и отправке. В конце концов, это то, для чего было разработано.
Другими словами: не беспокойтесь об этом!
Я создал Emailqueue, который является сервером, который позволяет вам добавлять электронные письма в очередь, чтобы ваше приложение было освобождено от стресса почтовой рассылки, а также предоставляет полезные дополнительные опции, такие как возможность программировать электронные письма, которые будут отправлены в будущем, или установка приоритетов отправки по электронной почте. Я думаю, это вполне может быть то, что вы ищете.
Адрес электронной почты доступен здесь: https://github.com/tin-cat/emailqueue
И есть также версия Docker, которая позволяет настроить рабочий сервер Emailqueue всего за несколько минут, здесь: https://github.com/tin-cat/emailqueue-docker