У меня есть PHP (XAMPP), установленный локально в ОС Windows, и я пишу веб-приложение с ним. Это веб-приложение рассылает несколько писем. В целях тестирования я на самом деле не хочу пересылать письма, сгенерированные системой.

Я также не хочу настраивать ртутную и пегасную почту, так как единственная функциональность, которая мне нужна, - это приложение, которое будет показывать мне каждое отправленное письмо и позволяет мне нажимать на возможные ссылки в письмах. Больше ничего не нужно из приложения. На самом деле мне не нужно хранить отправленные электронные письма, и я не хочу ограничиваться использованием только адресов электронной почты @localhost.

Для этого я предполагаю, что мне нужно настроить параметр PHP.ini: 'sendmail_path' для приложения, которое будет перехватывать письма и отображать их мне.

Есть ли такое приложение и где его найти?

2 ответа2

2

Интерфейс sendmail стал популярным благодаря своей простоте: сообщение, включая заголовки, просто записывается на его стандартный ввод. Это означает, что вы можете просто написать программу, которая копирует свой стандартный ввод в файл.

Предполагая, что PHP командной строки включен в XAMPP, вы можете использовать php.exe fake-sendmail.php в качестве sendmail_path, где fake-sendmail.php содержит следующий скрипт.

<?php
$name = time() . ".eml";
$fh = fopen($name, "w");
if (!$fh) die;
while ($buf = fread(STDIN, 8192))
    fwrite($fh, $buf);
fclose($fh);
1

Я попробовал решение, отправленное 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 строки, чтобы напечатать все параметры, отправленные в командную строку. Наконец, теперь я корректно обрабатываю возвращаемое значение fread благодаря гравитации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .