nastya97core
@nastya97core
Начинающий программист

Как и с какой скоростью должна делаться рассылка писем на почту?

Пытаюсь организовать рассылку писем (не спам) пользователям. Для каждого получателя формируется оригинальное письмо (типа спец предложения). Как сделала я:
собрала массив
[["email", "ФИО", "данные"],
["email", "ФИО", "данные"]
...
]

И прошла циклом for по массиву, отправляя письма с помощью phpmailer. То есть в каждой итерации было:
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
    $mail->isSMTP();   
    $mail->CharSet = "UTF-8";
...

Для теста отправила 10 получателям (себе). Все письма были доставлены
spoiler
Это не так важно, но на самом деле на самой первой отправке (я несколько раз отправляла) одно письмо не было доставлено и я не знаю почему, хотя пол логам было всё success, но на одну из почт письмо получено не было. При повторе операции уже все получатели получили по письму. Странно это


Но есть проблема. У меня стоял таймер: $t = microtime(1);e(microtime(1) - $t);
так вот на 10 писем ушло 13 секунд... Это больше 1 секунды на человека. И это очень долго. Если будет 40к пользователей, то такая рассылка займёт более 12 часов. Что я делаю не так?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Скажите пожалуйста, что я делаю не так?

Идею. Если Вы шлете через яндекс, например, то уже после какого-то там, но меньше сотни Вас просто притормозят и забанят за рассылку спама (это для Вас оно не спам - а для яндекса (и для меня) рассылка в 40к адресов - самый настоящий спам. Для таких рассылок обычно берут либо свои сервера либо платные сервисы. И те и другие работают одинаково - принимают все Ваши 40к писем в очередь и начинают ее неспешно рассылать. SMTP не является каналом для передачи бизнес-информации, Вы в курсе? Задержки при передаче писем допустимы до 5 суток, Вы в курсе? Поэтому 12 часов на рассылку - это еще ерунда.
Ну а для регулярных рассылок вообще ставят менеджеры списков рассылки - вы закидываете ему одно письмо, а он уже сам расфигачит по списку.
Ответ написан
@galaxy
Если отправляете через внешний SMTP сервер (через yandex или mail.ru, например), сильно ускорить не получится (во-первых, удаленное соединение, во-вторых, почтовики могут органичивать скорость приема писем). Можно попробовать сэкономить на коннекте/авторизации в это случае. Для этого не создавайте для каждого письма новый инстанс PHPMailer, а просто меняйте Body/Subject/To/etc. и делайте send() - он должен использовать одно соединение.

Быстрее можно отправлять, если использовать локальный SMTP (типа Postfix на Linux). Его можно настроить, чтобы он отправлял и через внешний релэй (yandex, etc.), и напрямую (этот случай требует настройки, иначе письма не дойдут или попадут в спам).
В реальности это все не сильно быстрее будет рассылаться (т.к. postfix поставит письма в очередь и будет в фоне рассылать), но по крайней мере ваш скрипт будет отрабатывать значительно быстрее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы