【发布时间】:2011-03-11 16:03:17
【问题描述】:
我需要测试一个使用 PHP 的 mail() 的函数
如何在不将脚本上传到服务器并在线测试的情况下做到这一点?
更重要的是,我在完全没有互联网连接的情况下进行开发。
我在从 XAMPP 运行 localhost 的 Mac OSX 上。
【问题讨论】:
-
你不能从 localhost 运行你的脚本吗?
标签: php email testing localhost
我需要测试一个使用 PHP 的 mail() 的函数
如何在不将脚本上传到服务器并在线测试的情况下做到这一点?
更重要的是,我在完全没有互联网连接的情况下进行开发。
我在从 XAMPP 运行 localhost 的 Mac OSX 上。
【问题讨论】:
标签: php email testing localhost
如果您在 Windows 上/使用 WAMP/UWAMP/XAMPP 之类的东西并且需要测试邮件,那么 Papercut 非常值得一看:
https://github.com/ChangemakerStudios/Papercut
您可以将 php.ini 中的 SMTP 设置保留为默认值 (localhost/25),这样就可以了。它看起来像一个电子邮件客户端,并在单独的部分中显示消息的所有部分/详细信息。
【讨论】:
基于@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
【讨论】:
【讨论】:
要测试从 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
【讨论】:
tee 而不是cat,这会在OSX 中给出Invalid argument 错误。如果使用 MAMP,我想同样的建议也适用,只是将路径更改为 php.ini 所在的位置。
cat >> /path/mail.txt 而不是cat > /path/mail.txt,它将附加邮件而不是覆盖它。例如,如果您正在调试向呼叫中心和客户发送邮件的位置,这可能会很有用。
您不必在计算机上安装 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。
【讨论】:
tee -a
tee file.txt > /dev/null 比 cat >> file.txt 更好吗?是否有一些我不喜欢使用tee 的原因?
嗯。我还没有尝试过,但是在 php.ini 中你可以设置“sendmail_path”......所以理论上你可以编写自己的 shell 脚本,简单地将输入写入文本文件,然后更改你的 php.ini 以使用它?然后只需运行测试并检查文本文件!
【讨论】:
在本地机器上设置一个 pop3 服务器。许多免费提供。 并使用 sendmail 在您的本地域内发送邮件。
默认情况下,在 Linux 中不需要设置 sendmail 路径。至少我从来不需要它。 只需使用 mail() 函数并点击本地域上的邮件
【讨论】: