You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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路径,需要添加自定义配置文件:

  1. 在项目根目录创建php-mailhog.ini文件,内容如下:
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mail:1025"
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:39:44