При отправке +-200 электронных писем с помощью php почту () функционируют в цикле

Примечание: Стоит отметить, что почта () функция не подходит для больших объемов электронной почты в цикле. Эта функция открывает и закрывает сокет SMTP для каждой электронной почты, которая не очень эффективна. Источник: руководство PHP

Что такое большие объемы? 100 или 1000?? Я могу безопасно сделать это циклом 200 раз без очень проблем? (Я не могу установить грушу),

9
задан Nica 11 November 2014 в 17:14
поделиться

5 ответов

Вы можете зациклить его 200 раз без особых проблем, хотя это будет намного медленнее, чем пользовательская почтовая программа или пакет, настроенный должным образом для обработки этого.

Конечный результат зависит от многих факторов. Главное, в чем вы должны убедиться, это в том, что вы используете set_time_limit(), чтобы дать скрипту достаточно времени для выполнения работы. Выгрузка работы в некую очередь, которая обслуживается скриптом cron, может облегчить вам жизнь, так как длительное выполнение PHP-скриптов приведет к другим проблемам с ресурсами.

В свое время я отправлял около 50 000 писем в рассылку подписчикам, используя почтовую функцию PHP и сервер RedHat с установленным Exim. Это занимало 4-6 часов с помощью пользовательского скрипта, который я запускал. В этом не было ничего эффективного, но это делало свою работу.

6
ответ дан 3 November 2019 в 00:00
поделиться

Чем меньше размер пакета, тем лучше, но это зависит от ваших настроек (скорость сервера, сеть и т. Д.). Я бы, вероятно, использовал cron и делал небольшие партии. Вы должны предположить, что mail () может зависнуть и прекратить обработку, поэтому важно отметить каждую строку в вашем списке как отправленное электронное письмо.

Например, если вы можете отправлять одно электронное письмо в секунду или немного быстрее, то я бы сделал пакет из 50 в задании cron, которое выполняется каждую минуту. Используйте свой SQL-запрос, чтобы получить ТОП-50 результатов, которые еще не были отправлены, поскольку вы не можете быть уверены, с чего начинаете.

2
ответ дан 3 November 2019 в 00:00
поделиться

Сначала вам нужно ознакомиться с Условиями использования (TOS), которые вы согласовываете с хостинг-провайдером или вышестоящим провайдером. Если вы создадите для них проблемы и нарушите TOS, они откажутся от вас, как горячая ложка.

Затем вы сможете избежать перегрузки почтовой системы и оставаться в тени любых «роботов-жнецов», просто добавляя вызов sleep () каждые 10 сообщений или около того. Сделайте его настраиваемым, чтобы вы могли ограничить как количество итераций, так и задержку сна. Eitehr в качестве параметров или через файл конфигурации (последний может быть опрошен в начале цикла, чтобы вносить корректировки на лету.

0
ответ дан 3 November 2019 в 00:00
поделиться

Около 5-6 лет назад (последний раз, когда я занимался подобными вещами), я видел программное обеспечение списков рассылки на PHP, использующее почту () функция, которая отправляла сотни сообщений каждый раз, когда вызывалась функция «отправить в список рассылки». По мере того, как клиент добавлял все больше и больше имен (из многих тысяч, в последний раз я проверял), система становилась довольно медленной. В конце концов, они купили стороннее программное обеспечение для обработки больших объемов рассылки и разместили его на сервере, отдельном от их веб-сервера, чтобы избежать замедления работы их веб-сайта.

Как указывали другие, вам следует согласовать это со своим хостинг-провайдером, прежде чем вы начнете отправлять пакеты, состоящие из более чем нескольких десятков за раз - каждая хостинговая компания будет иметь свои собственные политики, и если это нарушает TOS, они могут отключить вас / отключить хостинг. В идеале, передача больших объемов почты должна осуществляться с сервера только для этой цели. Таким образом, если он зависает или зависает, вам не придется беспокоиться о том, что это повлияет на другие приложения.

Если вы действительно отправляете очень-очень большие объемы почты, существуют коммерческие пакеты, которые также будут управлять списком рассылки, они будут управлять отказами и подписками, версиями писем, они будут делать текст вместо HTML-почта и т. Д. Изучите некоторые из них, если серьезно.

Я знаю, что это не отвечает на главный вопрос "альтернативы функции mail () ?" но это лучшее, что я могу сделать - я не видел ни одного! Единственное, о чем я могу думать, - это вручную управлять SMTP-соединениями в PHP (не уверен, насколько это возможно) или использовать для этого какую-то внешнюю библиотеку.

3
ответ дан 3 November 2019 в 00:00
поделиться

Если вы хотите отправлять письма до 1000 пользователей, просто передайте их в массиве, а затем поместите mail () в цикл.

Единственное, что нужно запомнить, это просто поместить set_time_limit (0) в первую строку и flush () в последнюю строку, и вы сможете отправить столько писем, сколько ты хочешь.

1
ответ дан 3 November 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: