#email #bulk-email
#Адрес электронной почты #массовая отправка электронной почты
Вопрос:
У меня есть база данных примерно из 10 тысяч пользователей, которые подписались на информационные бюллетени. Я меняю свой сайт с asp на php. Я отправляю информационные бюллетени с помощью задания cron. Я хочу отслеживать запись отчета о неудачной доставке. Как это возможно? Пожалуйста, направьте меня, спасибо.
Ответ №1:
В php при отправке почты с помощью функции mail вы должны проверять с условием
if(mail($кому, $тема, $ сообщение, $ заголовки)){ // Успешная доставка почты } else { // Код для неудачной рассылки }
Это крайне неточно для того, что на самом деле пытается сделать OP… Из руководства:
Важно отметить, что только потому, что почта была принята к доставке, это не означает, что почта действительно достигнет предполагаемого адресата.
В зависимости от типа сервера и конфигурации вы получите разные результаты. Лучше использовать SMTP для обеспечения надлежащего и согласованного интерфейса. Обычно я бы использовал библиотеку для этого… вы могли бы сделать это самостоятельно вручную, используя сокеты, но зачем изобретать велосипед? В зависимости от проекта я использую 3 библиотеки…
Для такого уровня взаимодействия я бы использовал SwiftMailer или Zend_Mail. Оба эти средства поддерживают получение информации из SMTP, а также отправку сообщения, так что, например, вы можете получить информацию о сбойных получателях (пример SwitftMailer). И Zend, и Swift также поддерживают пользовательские очереди буферов, что позволяет более глубоко интегрировать постановку в очередь и отправку сообщений с учетом приложений. SwiftMailer также имеет функцию пакетной отправки… я предполагаю, что это также доступно в Zend_Mail, но я никогда не копал глубоко.
Однако это только половина дела… Для того, чтобы действительно прочитать NDR, вам нужно выполнить скрипт входа в почтовое хранилище, просмотреть сообщения, а затем проанализировать заголовки и / или текст сообщения NDR (убедитесь, что вы ссылаетесь на документы RFC, перечисленные на странице wikipage), затем предпринять действия на основе этого. Недавно я использовал Zend_Mail_Storage для обработки этого. Если вам нужно это сделать, то вы, вероятно, также захотите просто продолжить и использовать Zend_Mail для отправки, поскольку хранилище включено в компонент. Вам нужно будет взглянуть на RFC для поиска NDR и кодов состояния, чтобы правильно проанализировать.
В целом, если это вообще возможно, я рекомендую просто интегрировать сторонний сервис, такой как MailChimp или Constant Contact. Это требует намного меньше работы, и если у вас нет команды разработчиков, работающих над этим со временем, сервис, вероятно, даст лучшие результаты по всем направлениям.
Комментарии:
1. Предоставление сторонней службы для обработки всего этого за вас — как правило, меньшая головная боль и меньше хлопот с вашей стороны (если только вы не рассылаете спам).) Вот список, который вам следует проверить: MailChimp, Constant Contact и AWeber.
2. Вчера я отправил тестовую рассылку в базу данных из 54000 пользователей с помощью phpmailer. Примерно через 10 минут скрипт остановился, и на странице появилась ошибка, подобная «ПРОИЗОШЛА ВНУТРЕННЯЯ ОШИБКА СЕРВЕРА». Я в замешательстве. Какой тип проблемы существует? Пожалуйста, помогите.
3. Это просто стандартный код для ошибки на стороне сервера, поэтому я понятия не имею. Вам следует просмотреть свои журналы ошибок и получить фактические ошибки PHP и / или http. Разместите реальные сообщения об ошибках в новом вопросе вместе с вашим процессом отправки писем. Я предполагаю, что вы исчерпали лимит времени для скрипта или исчерпали память или что-то в этом роде. Подсказка: не добавляйте просто всех получателей в BCC или В поля, вам нужно поставить отправку в очередь.
Ответ №2:
В php при отправке почты с помощью функции mail вы должны проверять с условием
if(mail($кому, $тема, $ сообщение, $ заголовки)){ // Успешная доставка почты } else { // Код для неудачной рассылки }
Комментарии:
1. Не совсем хорошее решение для того, что он пытается сделать (насколько я понимаю)… смотрите мой ответ.