Как сделать Sendmail-заглушку для локального сервера XAMPP?

Недавно я начал изучать PHP и столкнуться с проблемой создания Sendmail-заглушки для локального сервера XAMPP. Я хочу, чтобы сообщения отправленные локально, тестировочно. Были в специальной папке sendmail. Я отлично понимаю, что в комплекте к XAMPP'у присутствует пакет sendmail для отправки в него сообщений локально.

Так же хотелось бы увидить в каких файлах и папках нужно вносить имения, из-за обилия ответов на эту тему достаточно сложно разобраться в этом.

В качестве ОС использую Ubuntu

Ниже я предоставил код своего index.php

<?php

echo date('H:i:s');

$arr = ['a' => 1, 'b' => 2];
echo $arr['c'];

mail('[email protected]', 'a', 'b');
$i = 1; ?>

PHP-код файла mailtodisk

    #!/opt/lampp/bin/php
<?php
$input = file_get_contents('php://stdin');
$filename = '/opt/lampp/mailoutput/mail-' . gmdate('Ymd-Hi-s') . '.txt';
$retry = 0;
while(is_file($filename))
{
    $filename = '/opt/lampp/mailoutput/mail-' . gmdate('Ymd-Hi-s') . '-' . ++$retry . '.txt';
}
file_put_contents($filename, $input);

Ответы (2 шт):

Автор решения: Ivan Dudarev

Можно в php.ini указать директиву sendmail_path с путём к Вашей заглушке.

→ Ссылка
Автор решения: Антон

В папке sendmail в домашней директории xampp создаем файл sendmail.php:

    <?php

    //папка в которую будем складывать почту
    define('DIR','c:/xampplite/tmp/sendmail/');

    //получаем из потока тело письма
    $stream = '';
    $fp = fopen('php://stdin','r');
    while($t=fread($fp,2048))
        {
        if( $t===chr(0) )
            break;
        $stream .= $t;
        }
    fclose($fp);

    //Сохраняем в файл
    $fp = fopen(mkname(),'w');
    fwrite($fp,iconv("UTF-8","CP1251",$stream));
    fclose($fp);

    //Функция присвоения имени файлу
    function mkname($i=0)
        {
        $fn = DIR.date('Y-m-d_H-i-s_').$i.'.eml';
        if ( file_exists($fn) )
            return mkname(++$i);
            else return $fn;
        }

    ?>

В файле \php\php.ini ищем строчку

    sendmail_path = "C:\xampplite\sendmail\sendmail_.exe -t"
и заменяем ее на

sendmail_path = C:\xampplite\php\php.exe c:\xampplite\sendmail\sendmail.php
    Естественно, пути нужно подправить в соответствии с той директорией, куда вы установили xampp.
    Перезапускаем сервис apache, и проверяем работу нашей заглушки - если вы все сделали правильно, все отправленные письма будут ждать вас в папке /tmp/sendmail/
→ Ссылка