系统现象:
今天在客户上部署项目后,使用邮件服务进行发送邮件时出现异常,同样的项目在另一家客户上没有出现,邮件未使用465端口进行SSL加密。
异常日志:
[2023-05-06 17:25:28] local.ERROR: Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed {"exception":"[object] (Symfony\Component\Mailer\Exception\TransportException(code: 0): Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed at D:\xx\xx\xx\xx\vendor\symfony\mailer\Transport\Smtp\Stream\SocketStream.php:171)
思路:
经过Google搜索,查看官方issue中终于找到解决办法。
办法
在config目录下的mailer.php文件中找到smtp键值,添加auth_mode和verif_peer,即可解决问题,具体原因等下次有空再看源码分析下。
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN'),
'auth_mode' => null,
'verify_peer' => false,
],