Laravel注册新用户遇Swift_TransportException邮件连接错误求助
解决Swift_TransportException邮件连接问题
错误提示Connection could not be established with host mailhog :stream_socket_client(): php_network_getaddresses: getaddrinfo failed: No such host is known的核心原因是PHP无法解析mailhog主机名,导致无法建立SMTP连接。以下是具体排查和解决步骤:
1. 确认Mailhog服务是否正常运行
- 若使用Docker部署Mailhog,执行
docker ps命令,检查Mailhog容器是否处于Up状态,且端口1025已正确映射到主机。 - 若本地直接运行Mailhog,通过系统进程管理器确认Mailhog进程正在运行,且监听
1025端口。
2. 修复主机名解析问题
- Docker环境:确保Laravel应用容器与Mailhog容器处于同一个Docker网络内,这样才能通过容器名
mailhog进行访问。若不在同一网络,可通过docker network connect命令将两者加入同一网络。 - 本地单机环境:修改系统hosts文件,添加映射规则:
Windows系统hosts路径:127.0.0.1 mailhogC:\Windows\System32\drivers\etc\hosts;Linux/macOS路径:/etc/hosts。修改后保存,刷新系统DNS缓存。
3. 验证配置并清除缓存
- 检查
.env文件,确保MAIL_ENCRYPTION设置为null(无引号):MAIL_ENCRYPTION=null - 执行Laravel配置清除命令,确保新配置生效:
php artisan config:clear
4. 测试端口连通性
- 在项目根目录执行以下命令,测试是否能连接到Mailhog的SMTP端口:
telnet mailhog 1025 # 或使用nc命令(若已安装) nc -zv mailhog 1025 - 若上述命令失败,尝试替换为
localhost测试:
若此命令成功,说明主机名解析问题未解决,可临时将telnet localhost 1025.env中的MAIL_HOST改为localhost来绕过解析问题。
5. 临时替代方案(不影响业务流程)
若暂时无法解决Mailhog连接问题,可将邮件驱动改为日志模式,邮件内容会写入Laravel日志文件,不影响用户注册流程:
MAIL_MAILER=log
内容的提问来源于stack exchange,提问作者Bashar Dali
相关产品推荐
相关产品推荐

