BCC отправляет PHP mail () в список рассылки иначе, чем TO? - PullRequest
2 голосов
/ 24 февраля 2011

Я улучшаю код списка рассылки PHP, который использует mail() в цикле, перебирая всех подписчиков.Сценарий, используемый для отображения ошибки «Превышено максимальное время выполнения 30 секунд», которую я решил, добавив set_time_limit(0);.

Теперь ошибки нет, но отправка 100 сообщений заняла около семи минут.Какие у меня варианты?

Поможет ли отправка всего одного сообщения со всеми подписчиками в BCC или же "за кадром"?

Ответы [ 5 ]

1 голос
/ 24 февраля 2011

Отправка всем подписчикам, указав их в BCC, должна работать быстрее. Хотя это может быть хорошим вариантом для некоторой частной среды, я бы не советовал делать это на общедоступных веб-страницах / в системах, поскольку многие могут посчитать такую ​​электронную почту спамом.

Один из вариантов - отправлять электронные письма через cron job. В этом случае не имеет значения, сколько времени потребуется для отправки электронного письма, если все электронные письма в конечном итоге отправляются.

1 голос
/ 24 февраля 2011

Отправка всем, поскольку BCC будет лот быстрее. Код будет выполняться быстрее, а mail() будет выполняться только один раз.

Это быстрое решение, но, как уже упоминалось, большой список BCC - это безопасный путь к папке со спамом. Однако использование mail() также является надежным местом для спама.

Если вы хотите улучшить его, используйте PHPMailer из SourceForge и отправляйте по SMTP (меньше спам-обращений), используя cron в пакетах из X писем один раз.

Состояние документации PHP:

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

Для отправки большого количества сообщений электронной почты см. Пакеты » PEAR::Mail и » PEAR::Mail_Queue.

0 голосов
/ 24 февраля 2011

Я рекомендую отправлять почту через BCC, потому что это будет намного быстрее.Ваш сценарий просто должен установить одно соединение с SMTP-сервером, и этот сервер сделает все остальное за вас.

Я бы также посмотрел, например, PHPMailer или PEAR :: Mail.Недостаток метода mail () для массовых писем заключается в том, что он открывает новый сокет для SMTP-сервера для каждого отправляемого письма.Хорошая почтовая библиотека создаст сокет-соединение с SMTP-сервером один раз, а затем отправит все электронные письма и закроет его в конце.

Чтобы ускорить его, вы также можете посмотреть конфигурацию вашего SMTP-сервера(если возможно) и попытайтесь увеличить число демонов и т. д. Вы также можете принять во внимание, что некоторые SMTP-серверы имеют максимальные значения, которые вы можете отправлять.

0 голосов
/ 24 февраля 2011

Cron Job - лучшая идея.Я использовал это, и это работает ... Профиль, который вы код, поможет вам выяснить проблему.

0 голосов
/ 24 февраля 2011

Поскольку вы просто запрашиваете варианты, вот несколько:

  • Профилируйте свой код и посмотрите, почему медленный.Может быть, вы могли бы устранить некоторые проблемы с эффективностью.
  • Использование функции mail() обычно не рекомендуется, тем более, что существуют лучшие альтернативы, такие как swiftmail или Zend_mail.Хотя это может быть излишним для небольших почтовых требований
  • Возможно, это проблема сервера?Возможно, поговорите с администратором вашего сервера.
...