Справка по электронной почте - php mail() или SMTP

У меня есть сценарий информационного бюллетеня, который перебирает участников и отправляет письмо каждому индивидуально. раньше это работало нормально, но по мере увеличения числа скрипт начал давать сбой на полпути. Я использую SwiftMailer, и я получаю сообщение: «Отправка не удалась с использованием почты () в качестве почты PHP по умолчанию ()». Будет ли какая-либо польза от попытки отправки с помощью SMTP вместо встроенной функции mail()? Или я должен искать другое решение. Спасибо за любые указатели.


person tferdo    schedule 03.03.2011    source источник


Ответы (3)


На самом деле функция mail() не доставляет почту. Он просто передает сгенерированную вами почту на SMTP-сервер системы. В любом случае вы будете использовать SMTP.

Если swiftmailer использует функцию PHP mail(), то, скорее всего, что-то пошло не так с настройкой SMTP в вашей системе. Проверьте системные журналы (в частности, почтовый журнал) на наличие подсказок и посмотрите, даст ли Swiftmailer какие-либо более точные сообщения об ошибках.

person Marc B    schedule 03.03.2011
comment
Спасибо @Marc B - у меня нет доступа к /var/log на этом сервере, что доставляет неудобства. Я постараюсь, чтобы кто-нибудь с доступом передал мне содержимое журнала, а затем возьму его оттуда. - person tferdo; 03.03.2011

Согласно предложениям умного человека, разработавшего Swiftmail и, вероятно, ломал голову над этими вопросами (чтобы вы и я не делали то же самое), это может помочь вам использовать SMTP, а не mail транспорт

По моему опыту — и другим — функция mail() не особенно предсказуема или полезна.

Примечательно, что функция mail() ведет себя совершенно по-разному на серверах Linux и Windows. В Linux используется sendmail, а в Windows — SMTP. ...

Серьезными недостатками при использовании этого транспорта являются:

  • Непредсказуемые заголовки сообщений
  • Отсутствие обратной связи о сбоях доставки
  • Отсутствие поддержки нескольких плагинов, требующих обратной связи о доставке в режиме реального времени.

Это крайняя мера, и мы говорим это со страстью!

Более того, на той же странице он также объясняет, как обрабатывать информационные бюллетени, просто перебирая поле «Кому» вместо чтения раздела Пакетная отправка электронных писем на той же странице.

person Marco Demaio    schedule 25.02.2013

Функция mail() отправляет электронную почту с помощью SMTP. Однако вы можете попробовать что-то вроде PEAR::Mail. Использование mail() откроет новое SMTP-соединение для каждого сообщения, что довольно неэффективно в цикле. Это вполне может быть причиной ваших ошибок, хотя с таким общим сообщением об ошибке невозможно быть уверенным без дополнительных копаний.

person Wooble    schedule 03.03.2011
comment
как упоминалось Марку выше, я попытаюсь получить содержимое почтового журнала, и, надеюсь, там будет подсказка. Все, что я вижу на данный момент, это то, что Swift_ConnectionException генерируется с этой общей ошибкой. Я только что нашел это, что может помочь: Swift_Plugins_AntiFloodPlugin - swiftmailer.org/docs/antiflood-plugin- как - person tferdo; 03.03.2011