, как предложил Mercutio, я вставляю новую запись в таблицу почтовой очереди для каждого письма, ожидающего отправки, а затем использую отдельный процесс (например, CRON), чтобы периодически проверять таблицу на наличие элементов в очереди.
если какие-либо электронные письма поставлены в очередь (и электронная почта не настроена для каждого получателя), я бы затем сгруппировал электронные письма по доменам и отправил блоки вместе, чтобы уменьшить общее количество электронных писем, которые должны быть отправлены, т.е. если у вас есть 1000 электронных писем в очереди и 250 для учетных записей Gmail, я бы отправил 250 из 25 блоков по 10 (помните, что получатели скрытой копии не должны видеть друг друга).
для фактической отправки почты я бы использовал PEAR mail через функцию php mail ()
после отправки электронного письма либо удалите записи из очереди, либо измените флаг статуса, чтобы показать, что оно было отправлено и зациклено - я также добавил бы счетчик для отслеживания сообщений, которые не удалось отправить, и удалил их после сбоя x попытки
чтобы преодолеть проблемы тайм-аута, я бы тоже (в зависимости от ситуации)
- установите для set_time_limit () значение x секунд и отследите время выполнения сценария (уничтожение сценария через (x-1) секунд)
- вызвать скрипт из командной строки, чтобы избежать тайм-аутов
- установить ограничение на количество писем, которые скрипт может отправить за одно выполнение