PHP, sendmail и транспорты - как ускорить отправку почты

Я просто написал набор классов массовой рассылки для обработки огромного количества писем и анализа их содержимого в соответствии с переданными параметрами. Если я тестирую электронное письмо на 1000 случайных получателей и 1000 случайных отправителей из моей базы данных, до тех пор, пока сценарий не попадет в часть send () (я прокомментировал это сейчас), я получу производительность около 2 секунд и пиковую память 20 МБ. , и это здорово.

Однако, если я раскомментирую часть отправки, отправка займет 30 секунд. Это недопустимо, и хотелось бы как-то ускорить это. Из тестирования очевидно, что задержка вызвана не чем иным, как вызовом $ mail-> send (), как если бы он ждал, чтобы он что-то вернул, прежде чем продолжить цикл и отправить следующее электронное письмо.

Что я интересно: как мне ускорить вызов send ()? Что я могу сделать, чтобы это было быстрее? Я пробовал использовать два метода отправки:

  1. Zend SMTP-транспорт, подключение к серверу напрямую и просто отправка. Это занимает 30 секунд на 1000 писем.
  2. Отправить почту через Zend_Mail. Просто вызывайте функцию отправки Zend_Mail после подготовки каждого письма. Это занимает 60 секунд.

Обратите внимание, что организация очередей - это определенно вариант, и я встроил его в свои классы. Все, что нужно, - это активировать cron, и он работает как шарм. Но меня интересует сама отправка и как ее ускорить. Итак, собственно вызов send ().

6
задан Swader 12 July 2011 в 07:19
поделиться