Как сделать 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 шт):
Можно в 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/