2014-11-14 7 views
0

У меня есть ежедневный информационный бюллетень, который я отправляю в список людей каждый день. Я использую PHP и объект PHPMailer для отправки писем.Ошибка SMTP-ошибки - PHPMailer

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

mail->Send(); 

Метод класса о НЕКОТОРЫХ из людей - не все из них.

Все электронные письма были точно такого же размера (длина в символах), кроме их имени и адреса электронной почты.

Подробности об ошибках от

$mail->ErrorInfo; 

Включенные эти две ошибки

SMTP Ошибка: данные не принимаются. <p> Ошибка сервера SMTP: 2.1.5 ОК

Ошибка SMTP: данные не принимаются. < р & gtSMTP ошибка сервера: </р >

Почему ломаются P теги в сообщении об ошибке, я понятия не имею, - и почему первая ошибка имеет OK в нем ??

Однако у других людей в цикле электронные письма прошли отлично.

Также, когда я поместил скрипт в тестовый режим, ТОЛЬКО эти сбои были отправлены по электронной почте (так что один вызов сценария = одно письмо одному человеку), я не нашел проблем, и люди получили их emaail.

Теперь я спросил техническую поддержку, что означала ошибка и вернулась «Google it», и я не могу найти ошибку 2.1.5 ОК в любом месте. Я действительно не понимаю, почему он говорит «ОК» после ошибки.

В качестве теста на завтра я проверил тест на неудачную передачу, а затем спал в течение 5 секунд с повторением.

Я не знаю, поможет ли это, но я подумал, что, возможно, мой SMTP-сервер, который находится на том же сервере, что и мой скрипт (Rackspace VPS Linux), сталкивался с временными проблемами, поэтому спать может быть удобно в этой ситуации.

Это первый случай, когда у меня была эта проблема, я не перезагрузил APACHE или мой сервер (или почтовый сервер), и перед этим скриптом у меня был другой, отправляющий 403 письма без каких-либо проблем.

Было бы неплохо узнать, что такое ошибка и почему это произошло.

Роб

ответ

0

Эта ошибка определяется именно там, где можно было бы ожидать, что это будет - в the RFC that defines SMTP error codes. 2.1.5 означает «Действительный адрес назначения». То, что он начинается с 2, означает, что это не ошибка как таковая, но код ответа - предупреждения и ошибки начинаются с 4 и 5. Почему вы его получили, я не знаю, но, похоже, это не ожидалось в этом контексте , Почтовые серверы часто имеют проблемы - у них заканчивается дисковое пространство, замачивается фильтрацией спама, и именно поэтому почтовые серверы имеют очереди. Отправка напрямую с использованием SMTP-класса PHPMailer не подходит для отправки больших объемов - использование SMTP в порядке, но укажите его на подходящую (ближайшую) MTA, которая может правильно обрабатывать поставки.

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

+0

Так что спать между повторами сообщений поможет, если ошибка на самом деле не является ошибкой. На странице кодов ответов, которые я смотрел, не было видно 2.1.5, поэтому я не видел никаких упоминаний об этом. IF 2 означает «Адрес назначения действителен», то что означают .1 и .5? Есть все равно, чтобы узнать. Может быть, это был случай болотного почтового сервера? И в таком случае будет больше тайм-аутов между каждой отправкой электронной почты и повторной попыткой? – MonkeyMagix

+0

То, что он начинается с символа «2», означает, что это код успеха (см. Раздел 2). «.1» после этого означает, что это статус адреса (также раздел 2), весь шаблон '* .1.5' указан в разделе 3.2. Не все сочетания префикса и статуса имеют смысл - например, 5.1.7 имеет смысл для отказа от спам-фильтра, но нет никакого смысла в 2.1.7 для принятия спам-фильтра! – Synchro

+0

Вы можете попробовать установить '$ mail-> SingleTo = true;' и он будет отправлять каждое сообщение отдельно (если вы установите несколько адресов 'to'), что может дать вам более точную обратную связь. Вы также можете попробовать включить/отключить 'SMTPKeepAlive'. Если вы не отправляете большие объемы (тысячи), добавление задержек, вероятно, не поможет. – Synchro