Как сделать заглушку для mail на localhost?

Создал файл mail.php
<?php
$str = date( 'Y-m-d H:i:s' )."\r\n";
$str .= file_get_contents( 'php://stdin' )."\r\n\r\n";
file_put_contents( __DIR__.'/mail_log.txt', $str, FILE_APPEND );
?>

В php.ini в параметре sendmail_path указал путь к mail.php, перезапустил Apache, но ничего не работает. Прикладной скрипт, который на стороннем сервере успешно отправляет почту, на локальном сервере теперь стал надолго зависать.
Если mail.php вызывать непосредственно из браузера, то все отрабатывает, записывает пустую запись с меткой времени в лог-файл.

UPD.
Нашел решение.
sendmail_path = "путь_к_php.exe путь_к_mail.php"
Но почему нужно делать так? Это указание, что нужно обработать mail.php через php.exe?
  • Вопрос задан
  • 642 просмотра
Пригласить эксперта
Ответы на вопрос 2
romy4
@romy4
Exception handler
Я использую Mailslurper для таких целей. всё красиво и гуёво
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега PHP
Доброе утро.
Я не нашёл ссылку на блог, где я нашёл это решение, но вот Вам скрипт и немного описания.
Пользуюсь ubuntu, но, думаю, что если у Вас windows, то всё равно можно будет запустить эту заглушку. Возможно немного подправив скрипт.
sendmail.php
#!/usr/bin/php
<?php
/* заглушка mail() */
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
//$t = tempnam("/home/username/localhost/email", $matches[1]);
//
// более понятно название файла + возможность открывать в почтовой программе
$t = "/home/username/localhost/email/" . $matches[1] . '_' . time() . '.eml';

chmod($t, 0644);
file_put_contents($t, $input);
?>

Этот файл я расположил в домашней директории системы, в скрытой директории. Поставил права на выполнение файла как программы.
В /etc/php5/cli/php.ini и /etc/php5/apache2/php.ini прописал путь к файлу.
В директории localhost создал директорию email c правами доступа 0777
Всё, теперь все письма складываются в эту директорию и открываются почтовым клиентом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы