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

M1 Mac下PHP与Docker部署的MailHog集成失败求助

解决方案:M1 Mac 本地PHP 对接 Docker MailHog 邮件拦截问题

1. 确认Docker MailHog端口映射正确

先确保MailHog容器的SMTP端口(1025)已正确映射到本地主机:

  • 停止现有MailHog容器(如果运行):
    docker stop mailhog && docker rm mailhog
    
  • 重新启动容器,明确映射端口:
    docker run -d --name mailhog -p 127.0.0.1:1025:1025 -p 127.0.0.1:8025:8025 mailhog/mailhog
    
  • 测试SMTP端口连通性:
    nc -zv localhost 1025
    
    输出显示succeeded!则端口正常。

2. 配置PHP直接对接MailHog SMTP

不需要依赖系统sendmail或Postfix,直接让PHP把邮件发去MailHog的SMTP服务:

  • 编辑你的PHP配置文件/opt/homebrew/etc/php/7.4/php.ini,修改以下参数:
    # 注释掉原有的sendmail_path,或设为空
    ; sendmail_path = "/usr/sbin/sendmail -t -i"
    sendmail_path = ""
    
    # 配置SMTP参数指向MailHog
    SMTP = localhost
    smtp_port = 1025
    
  • 重启PHP-FPM服务:
    brew services restart php@7.4
    

3. (可选)如果依赖Postfix转发

如果你需要保留Postfix作为邮件中转,配置Postfix将所有邮件转发到MailHog:

  • 编辑Postfix配置文件/etc/postfix/main.cf,添加/修改:
    relayhost = [localhost]:1025
    
  • 重启Postfix:
    sudo postfix reload
    
  • 此时PHP的sendmail_path可以保留默认值,Postfix会自动将邮件转发到MailHog。

4. 测试邮件发送

创建最小测试脚本test.php:

<?php
$to = 'test@example.local';
$subject = 'MailHog Test';
$message = 'This is a test email for MailHog';
$headers = 'From: dev@example.local' . "\r\n";

$result = mail($to, $subject, $message, $headers);
echo $result ? '邮件发送成功,请查看MailHog界面' : '邮件发送失败';
?>

访问该脚本后,打开http://localhost:8025检查是否收到邮件。

5. 排查日志定位问题

  • 查看MailHog容器日志,确认是否接收到请求:
    docker logs mailhog
    
  • 查看PHP-FPM日志,排查发送错误:
    tail -f /opt/homebrew/var/log/php-fpm.log
    
  • 若使用Postfix,查看Postfix日志:
    tail -f /var/log/mail.log
    

关于mhsendmail的说明

Docker部署的MailHog不需要本地安装mhsendmail,只要确保PHP能将邮件投递到MailHog的1025 SMTP端口即可,mhsendmail是替代系统sendmail的轻量工具,仅在你不想用系统sendmail/Postfix时才需要安装。

内容的提问来源于stack exchange,提问作者Tomas Baranauskas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:36:29