Как подключится к SMTP Yandex?

Здравствуйте! У меня не получается отправлять почту через PHPMailer, вчера целый день убил на этот этот вопрос.
Возможно я упускаю какую-то мелочь. Буду благодарен за любую помощь.

Что я сделал:
  1. В своём аккаунте yandex создал и подтвердил домен mydomain.ru
  2. Прописал mx.yandex.ru в записях
  3. Cоздал почту noreply@mydomain.ru (чтобы отправлять сервисные сообщения регистрация, восстановление ...)
  4. Отправляю через PHPMailer 6.1.5
  5. Думал не верно логин и пароль прописываю, перебрал все сочетания.
  6. Создал отдельный пароль для приложения, не помогло
  7. Пробовал разные настройки портов и ENCRYPTION_xxx


Пример кода взял из исходника

Как правильно настроить эти параметры?

//Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;		// Enable verbose debug output
    $mail->isSMTP();							// Send using SMTP
    $mail->Host       = 'smtp.yandex.ru';		// Set the SMTP server to send through
    $mail->SMTPAuth   = true;					// Enable SMTP authentication

	$mail->Username   = 'логин аккаунта без @yandex.ru';			// SMTP username
	$mail->Password   = 'пароль аккаунта';		// SMTP password
    
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;	// Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
    $mail->Port       = 465;					// TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above


В зависимости от насторек получаю 2 типа ошибок
2020-05-25 15:29:38 SMTP ERROR: Failed to connect to server: (0)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message could not be sent. Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

или 

2020-05-25 15:39:14 SERVER -> CLIENT:
2020-05-25 15:39:14 SMTP NOTICE: EOF caught while checking if connected
SMTP Error: Could not connect to SMTP host.
SMTP Error: Could not connect to SMTP host.
Message could not be sent. Mailer Error: SMTP Error: Could not connect to SMTP host.
  • Вопрос задан
  • 30600 просмотров
Решения вопроса 1
@svsova Автор вопроса
Техподдержка решила вопрос в 2 подхода. Вот вкратце.
При анализе проблемы обнаружили, что на сервере устаревшие корневые сертификаты, в результате чего SSL соединение к почтовым серверам Яндекса завершалось ошибкой, пример:


[root@name /]# echo | openssl s_client -servername smtp.yandex.ru -connect smtp.yandex.ru:465 2>&1 | grep 'Verify return code'
Verify return code: 20 (unable to get local issuer certificate)
[root@name /]#


Добавили корневой сертификат Яндекса в список доверенных на сервере. Сейчас проблем с защищённым соединением к их почтовым серверам не наблюдаем:


[root@name /]# echo | openssl s_client -servername smtp.yandex.ru -connect smtp.yandex.ru:465 2>&1 | grep 'Verify return code'
Verify return code: 0 (ok)
[root@name /]#


У меня
Немного изменилась ошибка.
Было
2020-05-25 19:59:25 SMTP ERROR: Failed to connect to server: (0)
Стало
2020-05-26 20:52:58 SMTP ERROR: Failed to connect to server: Connection refused (111)

2 этап ТП:
Произвели дополнительные настройки корневых сертификатов и указали в скрипте SMTP хост для подключения.


Вот что вываливает тестовый скрипт при удачной отправке письма
5ece0e271aa20037306272.jpeg

Как это работает у меня.

$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host       = 'smtp.yandex.ru';
$mail->SMTPAuth   = true;
$mail->Username   = 'noreply@mydomain.ru';	
$mail->Password   = 'пароль от ящика noreply@mydomain.ru';
    
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port       = 465;


Да ёщё полезный сервис чтоб проверить свои настройки https://www.smtper.net/ и понять что дело в хостинге а не в твоей голове ))

PS вот еще можно на PHP проверить подключение
var_dump(fsockopen("ssl://smtp.yandex.ru",465));

результат 
resource(2) of type (stream)

если подключения нет пишет
bool(false)

Благодарю Всех кто откликнулся!!!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
daemonhk
@daemonhk
ПсиХоПат
Самое банальное - вы на ящик свой заходили через Яндекс.Почту? Подтвердили его?
Ответ написан
@anton99zel
29а класс средней школы №7
логин аккаунта без yandex.ru

почта для домена - нужно указывать ящик полностью
===
нужно использовать Open SSL в php
Ответ написан
Комментировать
@seopublic
Вот тут расписал что мне помогло: https://qna.habr.com/answer?answer_id=2192018
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы