При тестировании нашего почтового сервера мы наткнулись на ошибку, которая не позволяет нам отправлять почту через PHP, хотя регулярная отправка / получение по почте в почтовом ящике работает без каких-либо проблем.
У нас работает отдельный сервер Ubuntu 18.04, на котором есть только Mail-in-a-box со всеми необходимыми компонентами.
Вывод в текстовый файл error.log
Неустранимая ошибка PHP: Uncaught Swift_TransportException: ожидаемый ответ
код 354, но получил код «554» с сообщением «554 5.5.1 Ошибка: недействительно
Получатели \ г \ п»
PHP файл
$request_email = $_POST['request-email'];
$request_name = $_POST['request-name'];
$request_text = $_POST['request-text'];
$transport = (new Swift_SmtpTransport('data.abc.xy', 587, 'tls'))
->setUsername('[email protected]')
->setPassword('*******')
->setStreamOptions(array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false)));
$mailer = (new Swift_Mailer($transport));
$message = (new Swift_Message('Name: '. $request_name))
->setFrom(['' . $request_email => '' . $request_name])
->setTo(['[email protected]'])
->setBody('E-Mail: ' . $request_email . $request_text)
->setContentType("text/html");
$result = $mailer->send($message);
Мы попытались переустановить все компоненты Mail-in-a-box и все компоненты и проверить все на наличие орфографических ошибок. Ricipient существует на нашем почтовом сервере и может получать и отправлять почту вручную через клиента.
554 5.5.1 ошибка — ошибка SMTP «нет действительных получателейMsgstr «Это может произойти, если вы неправильно написали адреса получателей, но может также произойти, если вы не проходите надлежащую аутентификацию на исходящем сервере.
Так что проблема в том, что abc.xy не является зарегистрированным доменом, поэтому вы не можете отправить электронное письмо на этот адрес. Я думаю, что это не связано с вашим кодом.
Вы можете поймать Swift_TransportException
ошибка и обрабатывать его в своей собственной кодовой базе, например:
try {
$result = $mailer->send($message);
}
catch (Swift_TransportException $e) {
echo $e->getMessage();
}
Других решений пока нет …