Добрый вечер.
Есть проект на yii2 в котором надо настроить отправку почты. Задача простая, не раз делал, но сейчас возникла ошибка сертификата.
На сервере заказчика стоит vestacp c почтовым сервером (davecot, exim), сам проект находится на другом сервере.
Для тестирования настроил отправку через gmail - работает.
Сделал настройки на сервер заказчика, прописал smtp хост, порт, username, password, encryption которые предоставил заказчик. Отправка почты завершается ошибкой:
stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
Если установить encryption в null, то почта будет приходить, но не всегда, на некоторые почтовики письма не доходят.
Проверил доступ к smtp заказчика командой
openssl s_client -connect smtp.host:587 -starttls smtp
ответ команды
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: **********
Session-ID-ctx:
Master-Key: *********
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1720894738
Timeout : 7200 (sec)
Verify return code: 10 (certificate has expired)
Extended master secret: yes
Заказчик обновил сертификаты Let's Encrypt, но это не помогло.
Самостоятельный поиск решения не дал. На SO, Medium советуют обновить ca сертификаты, но ошибка остаётся.
Как решить проблему?
upd
В конфиге mailer-a дописал
stremOptions, вроде заработало, но насколько такое решение верно?
'mailer' => function () {
if (getenv('APP_DEBUG')) {
$transport = [
'class' => 'Swift_SmtpTransport',
'host' => 'mailer',
'port' => 1025,
'username' => null,
'password' => null,
'encryption' => null
];
} else {
$transport = [
'class' => 'Swift_SmtpTransport',
'host' => Yii::$app->settings->get(Settings::SMTP_HOST),
'port' => Yii::$app->settings->get(Settings::SMTP_PORT),
'username' => Yii::$app->settings->get(Settings::SMTP_USER),
'password' => Yii::$app->settings->get(Settings::SMTP_PASSWORD),
'encryption' => Yii::$app->settings->get(Settings::SMTP_ENCRYPT),
'streamOptions' => [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]
];
}
return Yii::createObject([
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'viewPath' => '@common/mail',
'transport' => $transport,
]);
},