寻找一个 PHP 邮件拦截应用程序

寻找一个 PHP 邮件拦截应用程序

我在 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 的返回值。

相关内容