Ответ 1
ваш сервер не разрешает другим отправителем и именем пользователя
вы должны настроить: $mail->From
как $mail->Username
Я пытаюсь выяснить эту проблему в течение 6 часов. Но ничего не имеет смысла. Вот сценарий; Существует хорошо отформатированный шаблон HTML
.
$mail_body = '
<b>Message Num :</b> 769<br />
<b>Message Date :</b> 2013-04-08 09:03:21<br />
<b>Name :</b> John Doe<br />
<b>Phone :</b> 123456789<br />
<b>E-mail :</b> [email protected]<br />
<b>Message :</b> Here is the message info<br />
';
Вот массив писем получателей;
$recipients = array("[email protected]","[email protected]");
Все выглядит отлично, а электронная почта готова к отправке. Вот конфигурация phpmailer;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "[email protected]";
$mail->FromName = "TEST";
$mail->WordWrap = 50;
foreach($recipients as $mail_add) {
$mail->AddAddress($mail_add);
}
$mail->IsHTML(true);
$mail->Subject = "TEST Subject";
$mail->Body = $mail_body;
if(!$mail->Send()) {
echo $mail->ErrorInfo;
} else {
echo "Mail sent...";
}
Все, что я могу проверить. Но иногда отправлялось электронное письмо. Иногда его не отправляли. Дайте мне следующую ошибку: The following SMTP Error: Data not accepted.
Надеюсь, я объяснил
ваш сервер не разрешает другим отправителем и именем пользователя
вы должны настроить: $mail->From
как $mail->Username
Для пользователей AWS, которые работают с Amazon SES в сочетании с PHPMailer, эта ошибка также появляется, если ваш отправитель "из" не является проверенным отправителем.
Чтобы добавить проверенного отправителя:
Войдите в консоль Amazon AWS: https://console.aws.amazon.com.
Выберите "Amazon SES" из списка доступных приложений AWS
В разделе "Проверенные отправители" выберите "Адреса электронной почты" → "Подтвердить новый адрес электронной почты".
Перейдите к этому новому электронному письму отправителя, щелкните ссылку для подтверждения по электронной почте.
И все готово.
установить phpmailer для работы в отладочном режиме, чтобы увидеть "реальную" ошибку за общим сообщением "Ошибка SMTP: данные не приняты", в нашем случае текст в сообщении запускал фильтр спам-сервера smtp.
$email->SMTPDebug = true;
Интересно, что у меня была та же самая проблема, и для меня проблема была в том, что мое соединение истекло. Чтобы увидеть больше подробностей о моих соединениях, я добавил $mail->SMTPDebug = 4;
в свой phpmailer (посмотрите, как перехватить отладку, поскольку функция вывода по умолчанию - echo).
Вот результат:
SMTP -> get_lines(): $data was ""
SMTP -> get_lines(): $str is ""
SMTP -> get_lines(): $data is ""
SMTP -> get_lines(): timed-out (10 seconds)
SMTP -> FROM SERVER:
SMTP -> ERROR: DATA not accepted from server:
Время ожидания по умолчанию установлено на 10 секунд. Если ваше приложение может поддерживать больше, добавьте эту строку в ваш phpmailer:
$mail->Timeout = 20;
Над определённым сообщением размера, оно заполняет содержимое при настройке через $mail- > Body.
Вы можете проверить его, если он хорошо работает с небольшими сообщениями, но не работает с большим (более 4-6 кБ), то это проблема.
Кажется, проблема $mail- > Body, поэтому вы можете обойти это, установив тело HTML вручную через $mail- > MsgHTML ($ message). И тогда вы можете попытаться добавить тело non-html только $mail- > AltBody.
Надеюсь, что я могу помочь, не стесняйтесь предоставлять более подробную информацию, информацию.
Я использовал только
$mail->Body = $message;
и для некоторых связанных форм PHP возвращал ошибку:
Ошибка SMTP: данные не приняты. Ошибка сервера SMTP: сбой команды DATA END. Подробно: Это сообщение было классифицировано как СПАМ и может быть не доставлено. Код SMTP: 550
Я исправил добавление этого кода после сообщения $mail-> Body = $:
$mail->MsgHTML = $message;
$mail->AltBody = $message;
Попробуйте установить порт на 26, это устранило мою проблему с сообщением "данные не приняты".
Я ударил эту ошибку с phpMailer + Amazon SES. Ошибка phpMailer не очень наглядна:
2: message: SERVER -> CLIENT: 554 Transaction failed: Expected ';', got "\"
1: message:
2: message: SMTP Error: data not accepted.
Для меня проблема была просто в том, что у меня было следующее в качестве типа контента:
$phpmailer->ContentType = 'text/html; charset=utf-8\r\n';
Но в нем не должно быть перевода строки:
$phpmailer->ContentType = 'text/html; charset=utf-8';
... Я подозреваю, что это был устаревший код из нашей старой версии. Таким образом, в основном, тройная проверка каждого параметра $ phpmailer, который вы добавляете - учитывается наименьшая детализация.
Во-первых, лучше установить TRUE для debug:
$email->SMTPDebug = true;
Или временное изменение значения public $ SMTPDebug = false; в классе PHPMailer.
И тогда вы можете увидеть полный журнал в браузере. Для меня это было слишком много писем в секунду:
...
SMTP -> FROM SERVER:XXX.XX.XX.X Ok
SMTP -> get_lines(): $data was ""
SMTP -> get_lines(): $str is "XXX.XX.XX.X Requested action not taken: too many emails per second "
SMTP -> get_lines(): $data is "XXX.XX.XX.X Requested action not taken: too many emails per second "
SMTP -> FROM SERVER:XXX.XX.XX.X Requested action not taken: too many emails per second
SMTP -> ERROR: DATA command not accepted from server: 550 5.7.0 Requested action not taken: too many emails per second
...
Таким образом, я узнал, в чем именно заключалась проблема.
У меня возникла такая же проблема. В моем случае почта отправки была отключена, потому что мой сервер Exchange ретранслировал электронную почту на сервер в Интернете. Этот сервер превысил квоту пропускной способности. По-видимому, у php mailer есть встроенный тайм-аут, и это было недостаточно долго, чтобы увидеть фактическое сообщение.
Мы отправляем электронную почту через SMTP-серверы Gmail, и мы часто получаем эту точную ошибку от PHPMailer, когда попадаем в наши ограничения Gmail отправки.
Вы можете проверить, происходит ли это с вами, перейдя в Gmail и пытаясь вручную отправить электронное письмо. В нашем случае это отображает более полезное сообщение об ошибке отправки лимитов.
В моем случае в cpanel у меня есть опция "Зарегистрировать почтовые идентификаторы", где я добавляю свой адрес электронной почты, и через 30 минут он отлично работает с простой функцией php mail.
Если вы используете SMTP-шлюз Office 365, то "Ошибка SMTP: данные не приняты". это ответ, который вы получите, если почтовый ящик заполнен (даже если вы просто отправляете с него).
Попробуйте удалить некоторые сообщения из почтового ящика.
В моем случае проблема была с содержанием почты. Когда я изменил содержание на более простое без HTML, это сработало. Но после обновления phpmailer все решено.
У меня точно такая же проблема. Интересно, как это работает. Я использую mailpoet в качестве клиента. Подтвержденный адрес электронной почты SES: [email protected] В настройках mailpoet Отправитель от - это Имя моего сайта; адрес электронной почты: [email protected] Тот же ответ - [email protected]
Какие изменения я должен сделать, чтобы решить это?