Есть ли ограничение при использовании функции php mail? - PullRequest
5 голосов
/ 09 октября 2009

Я использую php и mysql.

Я собираюсь отправить 10 000+ (десять тысяч плюс) писем, чтобы обновить своих подписчиков, и я отправляю их впервые. Я буду использовать функцию php mail, в основном вот что я сделаю:

Сначала получите данные из базы данных:

Select name, email FROM data

После этого, используя цикл while для отправки данных:

while($r = mysql_fetch_assoc($exe)){
    ...
    if($mail){
        echo "success<br>";
    } else {
        echo "failed<br>";
    }
}
echo "Sent all";

Я включаю оператор if .. else, чтобы гарантировать, что каждое электронное письмо отправлено успешно. Есть ли что-нибудь, о чем мне нужно позаботиться? Будут ли у меня проблемы при отправке 10K ++ пользователям?

Существует ли ограничение на количество отправляемых электронных писем?

Ответы [ 5 ]

10 голосов
/ 09 октября 2009

Обратите внимание на это примечание из почтовой документации :

Примечание: Стоит отметить, что функция mail () не подходит для больших объемов электронной почты в цикле . Эта функция открывает и закрывает сокет SMTP для каждого сообщения электронной почты, что не очень эффективно.
Для отправки большого количества сообщений электронной почты см. Пакеты »PEAR :: Mail и» PEAR :: Mail_Queue.

5 голосов
/ 09 октября 2009

Количество писем не ограничено, но есть ограничение по времени для скрипта PHP. См. max_execution_time , установленный в вашем php.ini, обычно это 20 или 30 секунд. Если вы этого не знаете, используйте phpinfo (), чтобы выяснить это.

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

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

2 голосов
/ 09 октября 2009

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

Не создавать цикл, который пытается отправить 10 тыс. Писем по почте ()

Кроме того, наиболее вероятным пределом для вас будет почтовый сервер вашего интернет-провайдера или хоста.

0 голосов
/ 09 октября 2009

Вы также можете захотеть настроить «настоящий» инструмент списка рассылки, например, mailman или хотя бы использовать группы псевдонимов (если это возможно).

Также см. Связанные вопросы о сбое сервера: https://serverfault.com/questions/67154/sending-an-email-to-about-10k-users-not-spam,, где упоминается PHPlist , наряду с другими. И здесь - https://serverfault.com/questions/68357/whats-the-best-way-to-send-bulk-email.

0 голосов
/ 09 октября 2009

Вы можете использовать pear :: Mail_Queue http://pear.php.net/package/Mail_Queue/

Это действительно хорошо сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...