在 Linux 虚拟机上安装 MailHog 以捕获外发电子邮件

Cso*_*mai 1 email config centos capture

我想通过在我的虚拟机中的 centos linux 开发环境上安装 MailHog 来简化开发。phpmail()函数没有报告任何问题(即,它返回 TRUE)但外发邮件没有出现在 MailHog 中。我应该如何正确设置?

Cso*_*mai 5

按着这些次序:

  • https://github.com/mailhog/MailHog/releases下载适当的 MailHog 版本。我MailHog_linux_amd64在这个例子中使用,但你可能需要一个不同的版本。我假设您使用主目录来存储文件。在可能的情况下,您不这样做,请相应地进行所需的修改。
  • 如果您的 VM 使用 ip 过滤,那么您应该允许通过端口 8025 进行通信,并在 iptable 配置中添加一行并重新启动它:

    vim /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8025 -j ACCEPT
    service iptables restart
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用以下命令启动 MailHog:

    ./MailHog_linux_amd64 -hostname=mylocal.vbox:8025
    
    Run Code Online (Sandbox Code Playgroud)

    其中 mylocal.vbox 是主机如何看待 VM 的域名。现在您应该看到一些详细说明它使用的 IP 地址和端口的行。

  • mhsendmail从这里下载:https : //github.com/mailhog/mhsendmail/releases

  • 将其更改为可执行(相应地调整文件路径):

    chmod 777 /home/you/mhsendmail_linux_amd641
    
    Run Code Online (Sandbox Code Playgroud)
  • 将您更改php.ini为使用mhsendmail而不是sendmail

    vim /etc/php.ini
    sendmail_path = "/home/you/mhsendmail_linux_amd64"
    service httpd restart
    
    Run Code Online (Sandbox Code Playgroud)
  • 从您的主机(使用我们上面使用的主机名)查看 MailHog Web 界面:http://mylocal.vbox:8025/。应该会出现 MailHog 的网络邮件界面。

  • 使用此 oneliner 测试从 VM 的命令行发送的邮件:

    php -r "\$from = \$to = 'your.emailaddress@gmail.com'; \$x = mail(\$to, 'subject'.time(), 'Hello World', 'From: '. \$from); var_dump(\$x);"
    
    Run Code Online (Sandbox Code Playgroud)

    它应该显示true并且MailHog 的Web 界面应该显示新电子邮件。

  • 玩得开心,根据需要通过 php 的 mail() 函数发送尽可能多的电子邮件。

还有一些想法:

  • 如果要覆盖默认 IP 地址和端口设置,则应使用以下语法:

    ./MailHog_linux_amd64 -ui-bind-addr=192.168.56.104:8026 -api-bind-addr=192.168.56.104:8026 -hostname=mylocal.vbox:8026 -smtp-bind-addr=192.168.56.104:8025
    
    Run Code Online (Sandbox Code Playgroud)
  • 在这种情况下,您必须以这种方式转义 php.ini 中的设置:

    sendmail_path = "/home/you/mhsendmail_linux_amd64 --smtp-addr=""192.168.56.104:8025"""
    
    Run Code Online (Sandbox Code Playgroud)