2011-02-28 3 views
0

У меня есть система, которая отправляет множество сообщений по электронной почте (около 500 адресов электронной почты в день). Я не спамер :) Это не очень большое количество электронных писем, но они отправляются в цикле, и я часто получаю эту ошибку «PHP Warning: mail(): не удалось выполнить программу доставки почты». Я знаю, что для этой проблемы есть пакет PEAR :: Mail_Queue. Но можете ли вы сообщить мне, действительно ли этот пакет полезен, или мне нужно искать что-то еще. Большое спасибоотправка большого количества электронной почты в цикле

ответ

0

Вы должны использовать sleep() между письмами, что решает это.

+0

Спасибо за ваш ответ. Но я боюсь, что это увеличит время выполнения скрипта, не так ли? – alagar

+1

Heya mate, это добавит немного времени на выполнение, но оно не будет рассчитывать на максимальное время выполнения. Так что за 500 писем один раз в день или даже 5000 это не имело бы значения. –

0

Альтернативой может быть также отправка почты через SMTP-сервер напрямую. Это экономит вам поездку на PHP по вызову sendmail (или любой другой MTA) «через оболочку», чтобы доставить почту. Например, Zeta Mail component позволяет отправлять письма непосредственно через SMTP-сервер, не требуя для этого специального расширения.

1

"PHP Предупреждение: почта(): Не удалось выполнить почтовую программу поставки"

... означает именно то, что он говорит по олову. PHP будет просто отсылать электронную почту во внешнюю программу в системе Linux/Unix/POSIX (как определено sendmail_path в php.ini). И в некоторых случаях это возвращает ошибку. Это не ошибка в PHP-коде.

Если у вас плохо настроенный MTA, проблема не будет решена с использованием SMTP-соединения.

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

2

Вы можете использовать PEAR's Mail_Queue package для отправки писем через SMTP-сервер напрямую - также он будет работать в фоновом режиме и поэтому не задержит или не увеличит время выполнения вашего скрипта.

Еще одно преимущество использования пакета Mail_Queue заключается в том, что вы можете получить идентификатор esmtp для каждого отправленного сообщения для ведения журнала - я не знаю, возможно ли это с компонентом Zeta Mail или любым другим.

Я разработал ряд общедоступных, а также интранет-решений, которые используют этот компонент и не имеют серьезных проблем с ним.

Смежные вопросы