2016-12-08 2 views
1

Я разработал PHP-код, который извлекает адреса электронной почты из списка и отправляет электронные письма один за другим. Я использую библиотеку PHPMailer для отправки через мою учетную запись Gmail.Оптимизация времени в почтовых сообщениях SMTP с использованием PHPMailer

Мое намерение - отправить около 5000 писем за раз. (Не волнуйтесь, это не спам. Это уведомления о предстоящем событии для его участников.) Однако до сих пор мой лучший результат - 133 письма, где код работает в течение 5 минут. Это очень медленно. Думаю, я могу продлить время выполнения с set_time_limit(). Тем не менее, для полного завершения отправки всех электронных писем потребуется около 3 часов.

Несколько уточнений относительно моего кода: 1. Я сохранивших связь SMTP живой с SMTPKeepAlive = true; 2. Настройку электронной почты, а также соединения, находится вне контура. Внутри цикла я только извлекаю идентификатор электронной почты, передаю его в AddAddress и отправляю. 3. Я хотел бы придерживаться своего собственного кода, а не использовать веб-сайт/программное обеспечение для рассылки.

Возможно ли оптимизировать процесс и завершить его в течение нескольких минут?

+0

Это звучит, как вы делаете большинство вещей в порядке. Вы основывали свой код на примере списка рассылки, предоставляемом PHPMailer? Однако Gmail никогда не будет очень быстрым. Для большей скорости отправьте свои сообщения в местный MTA, который может выступать в качестве реле. Используя этот механизм, я могу получить до 1 миллиона сообщений в час; 5000 займет всего несколько секунд. – Synchro

+1

Используйте профайлер, чтобы найти, где ваш код проводит свое время. – Robert

+0

Вы сказали, что ваш выход из SMTP-соединения открыт и отправляет все 5000 писем в рамках одной и той же SMTP-сессии? Есть ли причина для этого, потому что многие брандмауэры (включая ту, где я работаю) теряют длительные соединения. Там также указаны ставки по количеству сообщений электронной почты в течение часа с определенного IP-адреса. – Kitson88

ответ

0

Для этого количества электронной почты я бы использовал транзакционную почтовую службу, такую ​​как SendGrid или что-то подобное, потому что, когда вы хотите отправить электронное письмо (или одно электронное письмо на несколько адресов) через услугу, вам просто нужно создать запрос к API. И это занимает всего несколько миллисекунд вопреки всегда подключению к серверу smtp, ~ 500 мс.

Примечание: Я не отношусь к SendGrid каким-либо образом, я просто люблю их продукт (и обнаружил, что они работают в ситуации, подобной вашей). (У них есть бесплатный 12 000 писем в месяц).

Примечание2: У них также есть РНР api

Смежные вопросы