Laravel 8发送邮件报错:无法连接smtp.gmail.com,证书流加载失败
解决Laravel 8连接smtp.gmail.com的证书加载失败问题
问题分析
错误核心是OpenSSL证书文件/opt/homebrew/etc/openssl@1.1/cert.pem无法加载,导致SwiftMailer无法建立SSL连接到Gmail的SMTP服务器。
解决方案
1. 确认并修复证书文件
首先检查指定路径的证书是否存在:
ls /opt/homebrew/etc/openssl@1.1/cert.pem
- 若文件不存在,重新安装Homebrew的OpenSSL 1.1:
brew reinstall openssl@1.1
- 若仍无法生成证书,手动下载标准CA证书链:
curl -s https://curl.se/ca/cacert.pem > /opt/homebrew/etc/openssl@1.1/cert.pem
2. 配置Laravel指向正确证书
在项目根目录的.env文件中,添加SMTP流上下文配置,明确指定证书路径:
MAIL_ENCRYPTION=tls MAIL_SMTP_STREAM_CONTEXT='{"ssl":{"cafile":"/opt/homebrew/etc/openssl@1.1/cert.pem"}}'
如果证书路径已更新到系统默认信任路径,也可简化为:
MAIL_SMTP_STREAM_CONTEXT='{"ssl":{"verify_peer":true,"verify_peer_name":true}}'
3. 修正Gmail SMTP访问权限
Gmail的SMTP访问需要额外配置:
- 测试环境:开启Google账户的低安全性应用访问(生产环境禁用此选项)。
- 生产环境:开启Google账户2步验证后,生成应用密码,替换
.env中的MAIL_PASSWORD。 - 标准Gmail SMTP配置示例:
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=你的gmail账户@gmail.com MAIL_PASSWORD=你的应用密码或账户密码 MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=你的gmail账户@gmail.com MAIL_FROM_NAME="${APP_NAME}"
4. 验证PHP的OpenSSL配置
检查PHP是否正确加载了证书路径:
php -i | grep "openssl.cafile"
若输出为空,在php.ini中添加证书路径配置:
openssl.cafile=/opt/homebrew/etc/openssl@1.1/cert.pem
修改后重启PHP服务(如FPM或内置开发服务器)。
内容的提问来源于stack exchange,提问作者Kamania
相关产品推荐
相关产品推荐

