如何解决Docksal中Mailhog配置无效及mhsendmail未找到问题?
从你给出的cli日志警告sh: 1: /usr/local/bin/mhsendmail: not found,一眼就能看出核心问题——你的cli容器里没装mhsendmail工具,而PHP的mail()函数正是靠它把邮件转发到Mailhog服务的,这才导致发送失败返回bool(false),Mailhog自然收不到邮件。下面是一步步的解决办法:
解决步骤
1. 先确认PHP的sendmail配置
进入cli容器,检查当前PHP使用的sendmail路径:
fin exec php -i | grep sendmail_path
如果输出显示sendmail_path指向/usr/local/bin/mhsendmail,但这个文件实际不存在,那下一步就是安装它。
2. 在cli容器中安装mhsendmail
修改你的docksal.yml,给cli服务添加自动安装mhsendmail的逻辑:
version: "2.1" services: mail: extends: file: ${HOME}/.docksal/stacks/services.yml service: mail cli: extends: file: ${HOME}/.docksal/stacks/services.yml service: cli command: > sh -c " # 检查mhsendmail是否存在,不存在则下载安装 if [ ! -f /usr/local/bin/mhsendmail ]; then wget -O /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && chmod +x /usr/local/bin/mhsendmail fi && # 启动php-fpm docker-php-entrypoint php-fpm "
这个配置会在cli容器启动时自动检查并安装mhsendmail(如果缺失的话)。
3. 确保PHP配置正确指向mhsendmail
如果你的PHP还没配置正确的sendmail路径,需要添加自定义配置文件:
- 在项目根目录创建
php-mailhog.ini文件,内容如下:
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mail:1025"
- 在
docksal.yml的cli服务里挂载这个配置文件:
cli: # ... 保留之前的extends和command配置 ... volumes: - ./php-mailhog.ini:/usr/local/etc/php/conf.d/php-mailhog.ini
4. 重启服务并测试
执行命令重启所有Docksal服务:
fin restart
然后运行你的测试脚本:
fin exec php test.php
如果返回bool(true),再打开Mailhog仪表板(默认地址是http://localhost:8025),就能看到你的测试邮件了。
额外检查点
- 用
fin ps确认mail容器处于正常运行状态 - 查看mail容器日志
fin logs mail,排查是否有邮件接收的异常信息
内容的提问来源于stack exchange,提问作者DimaS
相关产品推荐
相关产品推荐

