我在 Windows 操作系统上本地安装了 PHP (XAMPP),并正在用它编写一个 Web 应用程序。此 Web 应用程序发送了几封电子邮件。出于测试目的,我实际上不希望转发系统生成的邮件。
我也不想设置 mercury 和 pegasus 邮件,因为我唯一需要的功能是一个应用程序,它可以向我显示已发送的每封电子邮件,并允许我单击电子邮件中的可能链接。应用程序不需要任何其他功能。我实际上不需要存储已发送的电子邮件,而且我不想仅限于使用 @localhost 电子邮件地址。
为此,我假设我需要配置 PHP.ini 的设置:“sendmail_path”到一个将拦截邮件并显示给我的应用程序。
是否有这样的应用程序?我在哪里可以找到它?
答案1
该sendmail
接口因其简单性而广受欢迎:包括标题在内的消息只需写入其标准输入即可。这意味着您只需编写一个程序将其标准输入复制到文件中即可。
假设 XAMPP 中包含命令行 PHP,您可以php.exe fake-sendmail.php
使用发送邮件路径,其中fake-sendmail.php
包含以下脚本。
<?php
$name = time() . ".eml";
$fh = fopen($name, "w");
if (!$fh) die;
while ($buf = fread(STDIN, 8192))
fwrite($fh, $buf);
fclose($fh);
答案2
我尝试了 grawity 发布的解决方案,它有效。这是代码的修改版本,这样无论发生什么情况,您都可以将 eml 文件与 php 文件放在同一个文件夹中:
<?php
$name = dirname(__FILE__).'/'.time() . ".eml";
$fh = fopen($name, "w");
if (!$fh) die;
for($i = 0; $i < $argc; $i++)
fwrite($fh, 'Arg'.$i.': '.$argv[$i].PHP_EOL);
while (($buf = fread(STDIN, 8192)) != "")
fwrite($fh, $buf);
fclose($fh);
编辑:我还添加了 2 行来打印发送到命令行的所有参数。最后,多亏了 grawity,我现在可以正确处理 fread 的返回值。