【问题标题】:Test PHP's mail function from localhost从 localhost 测试 PHP 的邮件功能
【发布时间】:2011-03-11 16:03:17
【问题描述】:

我需要测试一个使用 PHP 的 mail() 的函数
如何在不将脚本上传到服务器并在线测试的情况下做到这一点?
更重要的是,我在完全没有互联网连接的情况下进行开发。
我在从 XAMPP 运行 localhost 的 Mac OSX 上。

【问题讨论】:

  • 你不能从 localhost 运行你的脚本吗?

标签: php email testing localhost


【解决方案1】:

如果您在 Windows 上/使用 WAMP/UWAMP/XAMPP 之类的东西并且需要测试邮件,那么 Papercut 非常值得一看:

https://github.com/ChangemakerStudios/Papercut

您可以将 php.ini 中的 SMTP 设置保留为默认值 (localhost/25),这样就可以了。它看起来像一个电子邮件客户端,并在单独的部分中显示消息的所有部分/详细信息。

【讨论】:

    【解决方案2】:

    基于@Daniel-Egeberg 提供的答案,这对我在 Ubuntu 18.04 上有效:

    我打开 /etc/php/7.2/apache2/php.ini 并设置:

    sendmail_path='tee /path/to/file/mail.out'

    重启:

    sudo service apache2 重启

    然后创建 /path/to/file/mail.out 并更改它的权限:

    chmod 666 /path/to/file/mail.out

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 页面末尾有一个小的 Windows 部分。在其他 Unix 系统上,我认为您可以像 Mac 案例一样解决它。
      【解决方案4】:

      要测试从 apache 发送电子邮件,请执行以下操作

      创建一个文件夹来存储电子邮件。

      /home/username/Documents/TestEmails
      

      授予 apache 权限。从 Documents 文件夹中,运行

      sudo chgrp -R www-data TestEmails
      

      修改php.ini文件,我的位于

      /etc/php5/apache2/php.ini
      

      设置发送邮件路径

      sendmail_path ='cat > /home/username/Documents/TestEmails/mail.txt'
      

      重启apace2

      sudo service apache2 restart
      

      【讨论】:

      • 如果我使用 MAMP 服务器软件在 localhost 上进行开发怎么办?
      • 对我有用的最佳答案是下面的答案(stackoverflow.com/a/3176517/1130803),因为它使用tee 而不是cat,这会在OSX 中给出Invalid argument 错误。如果使用 MAMP,我想同样的建议也适用,只是将路径更改为 php.ini 所在的位置。
      • 这对我有用,但仅来自 CLI 脚本;但不是来自网络服务。除了重新启动 apache 之外,我还需要做些什么吗?
      • 如果您使用cat >> /path/mail.txt 而不是cat > /path/mail.txt,它将附加邮件而不是覆盖它。例如,如果您正在调试向呼叫中心和客户发送邮件的位置,这可能会很有用。
      【解决方案5】:

      您不必在计算机上安装 MTA 即可测试 PHP 的 mail() 函数。在基于 Unix 的系统(Linux、*BSD、OS X 等)上,您可以将 sendmail_path 设置为 tee mail.out > /dev/null 之类的东西。这会将电子邮件(包括标题)放入名为 mail.out 的文件中。

      这是一个如何工作的示例:

      daniel@daniel-laptop:~$ cat | php -d sendmail_path='tee mail.out > /dev/null'
      <?php
      mail('test@example.com', 'the subject', 'the body');
      ?>
      daniel@daniel-laptop:~$ cat mail.out
      To: test@example.com
      Subject: the subject
      X-PHP-Originating-Script: 1000:-
      
      
      the body
      

      您可以在php.ini 文件中设置sendmail_path。如果您想将电子邮件附加到文件而不是每次都覆盖,您可以使用tee -a 而不仅仅是tee

      【讨论】:

      • 希望在我花了很长时间弄清楚如何让 sendmail/postfix 正常工作之前看到这个
      • 我可以用电子邮件客户端阅读这个文件吗?就我而言,我使用的是tee -a
      • tee file.txt &gt; /dev/nullcat &gt;&gt; file.txt 更好吗?是否有一些我不喜欢使用tee 的原因?
      • 我不确定这是否能保证它可以在真实服务器上运行。
      【解决方案6】:

      嗯。我还没有尝试过,但是在 php.ini 中你可以设置“sendmail_path”......所以理论上你可以编写自己的 shell 脚本,简单地将输入写入文本文件,然后更改你的 php.ini 以使用它?然后只需运行测试并检查文本文件!

      【讨论】:

        【解决方案7】:

        在本地机器上设置一个 pop3 服务器。许多免费提供。 并使用 sendmail 在您的本地域内发送邮件。

        默认情况下,在 Linux 中不需要设置 sendmail 路径。至少我从来不需要它。 只需使用 mail() 函数并点击本地域上的邮件

        【讨论】:

        • 那将是一个 SMTP 服务器伙伴 pop3 是实际接收电子邮件而不是发送邮件。
        • LOL 雅但是 sendmail 会将邮件发送到哪里??????????他没有互联网连接。好的 ??????这就是他需要 POP3 服务器来运行本地测试的原因。 >> 我们不是在谈论 SMTP 服务器。它的发送邮件
        • 可以访问机器,就像他只使用邮件服务器一样,他可以验证它而无需通过 pop3 连接。
        猜你喜欢
        • 1970-01-01
        • 2016-11-03
        • 1970-01-01
        • 2012-02-27
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        相关资源
        最近更新 更多