Я пытаюсь использовать 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();
}
Дело не в том, что сервер не поддерживает TLS, а в том, что вы пытаетесь использовать явный SSL (SMTP+STARTTLS
== 'tls'
в PHPMailer) на порт, ожидающий неявный SSL (SMTPS
). Вы также можете исправить это (не осуждая с 1998 года), установив $mail->Port = 587;
, который является то, что документация предлагает (смотрите в разделе «Использование шифрования»).
Кстати, ваш перехват ошибок не будет работать, потому что PHPMailer не генерирует исключения по умолчанию, вам нужно передать true
в конструктор, чтобы включить их, как это:
$mail = new PHPMailer(true);
В середине написания этого вопроса, «TLS» попался на глаза. Я никогда не думал об этом, и мой SMTP-сервер не поддерживает TLS!
Я прочитал так много постов, пытаясь понять это. Я думал, что кто-то должен опубликовать возможный ответ!
$mail->SMTPSecure = 'ssl';