У меня есть ежедневная новостная рассылка, которую я рассылаю списку людей каждый день. Я использую PHP и объект PHPMailer для отправки электронных писем.
Это работало нормально до сегодняшнего дня, когда я не получил электронное письмо (тест) и проверил журналы, чтобы обнаружить, что периодически я получаю ошибки SMTP от
mail->Send();
Метод занятия по НЕКОТОРЫМ людям — далеко не всем.
Все письма были одинакового размера (длиной в символах), за исключением их имени и адреса электронной почты.
Детали ошибки от
$mail->ErrorInfo;
Включены эти две ошибки
Ошибка SMTP: данные не принимаются.<п>Ошибка SMTP-сервера: 2.1.5 ОК
Ошибка SMTP: данные не принимаются.<п&Ошибка сервера gtSMTP: </п>
Почему в сообщении об ошибке есть неработающие теги P, я понятия не имею, а также почему в первой ошибке указано «OK» ??
Тем не менее, у других людей в цикле электронные письма шли нормально.
Кроме того, когда я перевел скрипт в тестовый режим, чтобы ТОЛЬКО эти сбои были отправлены по электронной почте (так что один вызов скрипта = одно письмо одному человеку), я не нашел никаких проблем, и люди получили свое электронное письмо.
Теперь я спросил техподдержку, что означала ошибка, и вернул «Google it», и я нигде не могу найти ошибку 2.1.5. Я действительно не понимаю, почему он говорит ОК после ошибки либо.
В качестве теста на завтра я поставил тест на неудавшуюся отправку, а затем на 5 секунд переждал с повторной попыткой.
Я не знаю, поможет ли это, но я подумал, что, возможно, у моего SMTP-сервера, который находится на том же сервере, что и мой сценарий (Rackspace VPS Linux), возникли временные проблемы с подключением, поэтому в этой ситуации может пригодиться режим сна.
Это первый раз, когда у меня возникла эта проблема, я не перезагружал APACHE или мой сервер (или почтовый сервер), и перед этим сценарием я отправил 403 электронных письма без каких-либо проблем.
Было бы неплохо узнать, что это за ошибка и почему она произошла.
обкрадывать
Эта ошибка определяется именно там, где вы ожидаете RFC, который определяет коды ошибок SMTP. 2.1.5 означает «Адрес получателя действителен». То, что он начинается с 2, означает, что это не ошибка как таковая, а код ответа — предупреждения и ошибки начинаются с 4 и 5. Почему вы получили это, я не знаю, но, безусловно, кажется, что в этом контексте этого не ожидалось. , Почтовые серверы часто имеют проблемы — им не хватает места на диске, они забиты фильтрацией спама, и именно поэтому почтовые серверы имеют очереди. Прямая отправка с использованием класса SMTP в PHPMailer не подходит для отправки большого объема — использование SMTP — это хорошо, но направьте его на соответствующий (ближайший) MTA, который может правильно обрабатывать доставку.
Что касается искаженного ErrorInfo
содержание, я подозреваю, что вы используете старую версию PHPMailer — вывод отладки был очищен сравнительно недавно. Еще одна вещь, которая изменилась в последнее время, — это обработка ошибок во время однократной отправки нескольким получателям (например, BCC) — теперь гораздо больше шансов дойти до конца длинного списка получателей, не сдаваясь, чем это было раньше.
Других решений пока нет …