Получение ошибки 405 (не разрешено) в PHPMailer

Я пытаюсь использовать PHPMailer для отправки писем из контактной формы. После отправки сервер не отвечает более 5 минут, после чего ERROR 405 Not Allowed - ngnix,

Я использую аутентификацию SMTP от [email protected], а SMTP-сервер находится по адресу voyager.websitewelcome.com. Я подумал: «Может ли это быть из-за междоменной регистрации, хотя это не AJAX и все это PHP?»

Нет, см. Ответ ниже:

mail = new PHPMailer;

$mail->isSMTP();
$mail->Host = 'voyager.websitewelcome.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'mypassword';
$mail->SMTPSecure = 'tls'; //<---- THIS is the problem
$mail->Port = 465;

$mail->setFrom('webmaster@mydomain', 'My Company Kiosk');
$mail->addAddress('[email protected]', 'My Name');

$mail->isHTML(true);

$mail->Subject = 'New Lead from My Company';
$mail->Body    = '<b>test</b> html'; //$body;
$mail->AltBody = 'test text';try {
$mail->send();
//echo $output;
}
catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
$e->getMessage();
}

1

Решение

Дело не в том, что сервер не поддерживает TLS, а в том, что вы пытаетесь использовать явный SSL (SMTP+STARTTLS == 'tls' в PHPMailer) на порт, ожидающий неявный SSL (SMTPS). Вы также можете исправить это (не осуждая с 1998 года), установив $mail->Port = 587;, который является то, что документация предлагает (смотрите в разделе «Использование шифрования»).

Кстати, ваш перехват ошибок не будет работать, потому что PHPMailer не генерирует исключения по умолчанию, вам нужно передать true в конструктор, чтобы включить их, как это:

$mail = new PHPMailer(true);
2

Другие решения

В середине написания этого вопроса, «TLS» попался на глаза. Я никогда не думал об этом, и мой SMTP-сервер не поддерживает TLS!

Я прочитал так много постов, пытаясь понять это. Я думал, что кто-то должен опубликовать возможный ответ!

$mail->SMTPSecure = 'ssl';
0

По вопросам рекламы [email protected]