laravel9邮件发送异常

383 阅读1分钟

系统现象:

今天在客户上部署项目后,使用邮件服务进行发送邮件时出现异常,同样的项目在另一家客户上没有出现,邮件未使用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,  
],