Массовая электронная почта PHP - максимальный выделенный IP-адрес?

Есть ли способ отправить около 3000+ писем из одного запроса php-скрипта, не перегружая выделенный IP-адрес... максимум 500 в час?

Если вы меня не поняли .. здесь подробно :)

Я могу отправить только 500 электронных писем через функцию mail() в PHP в час через мой выделенный IP-адрес, есть ли способ отправить, например, 3000 строк электронных писем, извлеченных из адреса электронной почты, но разбить функции mail() для 500р в час...

Спасибо уже!


person tarnfeld    schedule 25.08.2009    source источник
comment
Да... тот, в котором хранится электронное письмо, на которое я автоматически отправляю...   -  person tarnfeld    schedule 26.08.2009


Ответы (5)


Создайте 2 таблицы, одну для сообщения электронной почты и одну для списка получателей. Затем создайте сценарий, который будет запускаться cron, который проверяет, есть ли новое сообщение в таблице сообщений, и, если это так, отправляет пакет электронной почты следующему набору получателей. Отметка каждого получателя после отправки почты.

Затем вы создаете веб-интерфейс для своего клиента, чтобы создать сообщение и прикрепить получателей к сообщению, как только пользователь пометит сообщение как готовое к отправке, ваше задание cron подберет его и обработает.

Если нет никаких сообщений для отправки, ваша работа cron ничего не делает.

person Craig    schedule 25.08.2009

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

person Glen Solsberry    schedule 25.08.2009
comment
я не думаю, что он предлагает вам выбирать вручную те, которые не были отправлены. Я думаю, он имел в виду выбор SQL. - person glomad; 26.08.2009
comment
как бы я заснул между звонками - person tarnfeld; 26.08.2009
comment
запускать через cron, sleep(1000) и т.д. - person Glen Solsberry; 28.08.2009

Я бы поместил поле в БД, чтобы показать, когда последнее электронное письмо было отправлено каждому пользователю и какое это было электронное письмо. У меня также была бы еще одна таблица БД, чтобы показать каждое отправленное вами электронное письмо и было ли оно отправлено всем пользователям.

User Table:
Id, UserName, Email, etc, DateTimeOfLastEmail, LastEmailId

Email Table:
Id, EmailSubject, EmailContent, DateTimeSent, SentToAll(True/False), DateTimeOfFinish
person Josh Curren    schedule 25.08.2009
comment
Дело в том, что я хочу, чтобы это было полностью автоматизировано? Для клиента... это будет означать, что клиент входит в систему через час, а затем отправляет следующую партию... - person tarnfeld; 26.08.2009
comment
вы можете использовать Cron Job, чтобы каждый час проверять, есть ли какие-либо электронные письма, которые нужно отправить, и если да, то отправлять их - person Josh Curren; 26.08.2009

Спасибо за ответы на все вопросы! Лучший способ, который я нашел, состоял в том, чтобы просто спать() между вызовами, используя sleep(), поскольку я тестировал 400 писем, это заняло 17 секунд :)

Маловероятно, что пользователь отправит больше, чем ограничение в 450... но если они это сделают, у меня есть оператор if до того, как while() завершит проверку, есть ли более 450 строк, если это так, он будет спать между каждым... это работает без громоздких баз данных :)

Спасибо!

person tarnfeld    schedule 28.08.2009

хорошо, после некоторых математических расчетов вы можете отправлять электронное письмо каждые 8,3 секунды (498 / час), но это не решает проблему. Я думаю, что другим подходом было бы использование БД, запрос на 500 и запуск задания CRON каждый час.

Таким образом, в таблице БД вы можете заставить скрипт обновить поле после отправки электронного письма, чтобы следующее задание cron запросило и получило следующие 500 электронных писем, которые необходимо отправить.

person Phill Pafford    schedule 25.08.2009
comment
Мне нравится идея каждые, скажем, 10 секунд.... Я хочу, чтобы это было автоматизировано для моего клиента, поэтому я не могу настроить cron-jobs в cpanel для каждого письма, которое они хотят отправить? - person tarnfeld; 26.08.2009
comment
задание cron будет запускать PHP-скрипт каждые 10 минут независимо от электронной почты. PHP-скрипт будет запрашивать БД, чтобы получить следующее электронное письмо и отправить его, а также обновить таблицу БД, если электронное письмо было отправлено или нет. Что-то вроде флага в таблице, поэтому PHP-скрипт может запускаться один раз, запрашивать следующее электронное письмо для отправки, делать некоторые обновления, может быть, также иметь отметку времени и некоторую логику для проверки того, была ли повторная попытка отправить электронное письмо или нет, и т. д. ... - person Phill Pafford; 26.08.2009