как отправить сообщение на свою почту с арендованного хостинга?
у меня есть хостинг с почтовым доменом mail.aniproject.ru
вот его настройки
Вот код с помощью которого я пытаюсь отправить письмо
<?php
namespace project;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require __DIR__ . '/../vendor/autoload.php';
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->Host = 'mail.aniproject.ru';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->setFrom('[email protected]', 'First Last');
$mail->addAddress('[email protected]', 'John Doe');
$mail->Subject = 'Проверка работы почты хостинга';
$mail->Body = 'Привет Рей';
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message sent!';
}
Обработка SSL тоже включена
Вот то что я получаю при попытке запустить скрипт
2024-04-27 19:37:12 SMTP ERROR: Failed to connect to server: (0)
2024-04-27 19:37:12 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/TroubleshootingSMTP server error: Failed to connect to server
Что нужно сделать чтобы сообщение отправлялось?
Ответы (1 шт):
Вобщем если входите по имени сервера исходящей почты указанной в настройках вашего почтового ящика смотрите внимательно на ошибку.
Например у меня была
2024-04-28 10:30:31 SMTP Error: Could not connect to SMTP host. Connection failed. stream_socket_enable_crypto(): Peer certificate CN=`*.hosting.reg.ru' did not match expected CN=`mail.aniproject.ru'
как видно из ошибки указанное мною доменное имя для подключения mail.aniproject.ru
не соответсвует указанному в SSL
-сертификате *.hosting.reg.ru
.
Узнать же это имя можно в том же сообщении об ошибке или в начале вывода, в моем случае это оказался server109.hosting.reg.ru
.
Например:
2024-04-28 09:48:39 SERVER -> CLIENT: 220 server109.hosting.reg.ru ESMTP Exim 4.97.1 Sun, 28 Apr 2024 12:48:39 +0300
2024-04-28 09:48:39 SERVER -> CLIENT: 250-server109.hosting.reg.ru Hello reiji-Legion-5-15IMH6 [85.26.176.81]
2024-04-28 09:48:41 SMTP ERROR: QUIT command failed: ՠc<���D[�+�7<TMS�Jr�221 server109.hosting.reg.ru closing connection
В общем рабочий скрипт для моей ситуации это
<?php
namespace project;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require __DIR__ . '/../vendor/autoload.php';
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->Host = 'server109.hosting.reg.ru';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'secret';
$mail->setFrom('[email protected]', 'First Last');
$mail->addAddress('[email protected]', 'John Doe');
$mail->Subject = 'Проверка работы почты хостинга';
$mail->Body = 'Привет Рей';
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message sent!';
}
P.S. подключиться к серверу по 465 порту так и не удалось, оставил письмо в техподдержку хостинга, подключался по 587. Соответственно и $mail->SMTPDebug
пришлось поменять на PHPMailer::ENCRYPTION_STARTTLS
. А также проверить подключение к желаемому серверу можно и вручную с помощью openssl s_client -starttls smtp -tls1_2 -crlf -connect server109.hosting.reg.ru:587
. Только не забывайте указывать нужный порт и если нужно какой-то конкретный тип шифрования то и его тоже.