Мнение об отправке электронных писем от php

Я готовлю веб-сайт, который отправит уведомления по электронной почте зарегистрированным пользователям. На основе моего опыта я знаю, та отправка, электронные письма являются несколько болезненным процессом для PHP, особенно когда мы говорим приблизительно тысячи. Один из моих веб-сайтов посылает электронное письмо время от времени 1000-1500 людям. Требуется приблизительно 5 минут для PHP для выполнения этого, таким образом, мы выполняем его в течение ночи, когда загрузка сервера является самой низкой. Я использую собственный компонент mail() функция без любого SMTP. Это хорошо работает на выделенном сервере, но я не большой поклонник этого решения.

Я хочу смочь отправить подобные суммы в любое время, не рискуя потерей работоспособности сервера (и это, чтобы быть помещенным в черный список).
Я читал, то идеальное решение состоит в том, чтобы послать электронные письма в пакетах (скажите относительно 20), каждые несколько минут из сценария это инициировано Кроном. Это кажется мне как действительно разумная идея, но... Что, если у меня нет доступа к Крону (не все поставщики услуг хостинга предоставляют доступ к нему) и веб-сайт не достаточно популярно, чтобы смочь инициировать сценарий на загрузке страницы?

Я настаиваю на том, чтобы использовать свой сервер, чтобы сделать отправку по почте и не любое внешнее решение.

PS. Я нашел решения как они: http://www.mywebcron.com/, но хорошо работает это?


Править

Только добавить:

  • Я использую CodeIgniter,
  • уровень, на который электронные письма посланы с моего текущего сервера, обычно является 0,2 секундами на электронную почту.

7
задан Michal M 27 January 2010 в 08:42
поделиться

2 ответа

Используя почтовый класс PHP, такой как PHPmailer или SwiftMailer, вы можете отправлять почту напрямую через SMTP, что будет намного быстрее. И да, отправлять большое количество писем лучше всего через cron, поэтому вы отправляете X писем каждую минуту. Таким образом вы избежите перегрузки сервера. Если вы не можете создать рабочие места в cron на вашем сервере, я предлагаю вам сменить хостинг-провайдера, иначе сайт, на который вы перешли по ссылке, будет вашей единственной жизнеспособной альтернативой (но вы зависите от какой-то третьей стороны таким образом, что на самом деле не очень круто)

.
3
ответ дан 7 December 2019 в 12:20
поделиться

Если вы не можете использовать периодическую работу, вы можете захотеть посмотреть решение о очереди, как Gearman.

То, что вы хотели бы сделать, это толкать все ваши электронные письма в очередь и иметь 1 или более длинные рабочие, которые выбирают работу с очереди. Если вы хотите добавить задержку в систему, просто добавьте там сна.

Некоторые действительно основные псевдокод:

#wherever you launch the jobs from
for each user
  gearman.push(user.generateEmail())


#in your consumer script
while true
  message = gearman.consume()
  message.send()
  sleep(5)
2
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

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