как отправить сообщение на свою почту с арендованного хостинга?

у меня есть хостинг с почтовым доменом 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 шт):

Автор решения: Reiji Akkerman

Вобщем если входите по имени сервера исходящей почты указанной в настройках вашего почтового ящика смотрите внимательно на ошибку.

Например у меня была

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. Только не забывайте указывать нужный порт и если нужно какой-то конкретный тип шифрования то и его тоже.

→ Ссылка