Скорость постановки в очередь exim через php mail(...)
Использую собственный скрипт для проведения массовых рассылок на php. Раньше рассылок выполнялось мало, но сейчас появилась необходимость ускорить значительно увеличить объемы.
Делал множество замеров — скорость выполнения функции mail(...) варьируется от 0.07 до 2,9 при средней = 0,87, т.е. чуть больше письма в секунду, а необходимо довести до чего-то вроде 20 писем / сек.
Размер писем средний = 62020 символов, но письма размером в 1 символ отправляются с такой же скоростью.
Сервер — VDS
2400 Mhz
2048 RAM (1900 free)
amd64
FreeBSD 8.2
Exim version 4.73
PHP 5.2.17 with Suhosin-Patch 0.9.7 (cli)
Насколько мне известно, функция mail() использует вызов локального MTA (в Unix это обычно /usr/sbin/sendmail). Т.е. сколько вызовов mail() — столько раз запускается внешний интерфейс для отправки. Само собой, данный способ далёк от того, чтобы быть хоть сколько-нибудь быстрым.
Дабы не изобретать велосипед, стоит почитать хотя бы нижеследующий форумный топик PHP Bulk Email — Best Practices?
Отправляйте напрямую exim, а не через mail.
Что в конфиге exim?
Например вот такие штуки есть?
На днях сделал рассылку на 8000 адресов. Все прошло на ура. Может кому понадобиться, использовал вот такие параметры в конфиге (можно добавить роутеры для mailman):
КОД: ВЫДЕЛИТЬ ВСЁ • РАЗВЕРНУТЬ
smtp_accept_max = 150
smtp_accept_max_per_connection = 100
smtp_connect_backlog = 30
smtp_accept_max_per_host = 50
smtp_accept_reserve = 30
smtp_reserve_hosts = +relay_from_hosts
split_spool_directory = true
remote_max_parallel = 50