Запись сообщений из mail (php) в log файл в Ubuntu

Как сделать перенаправление вывода из mail-функции php в лог файл в ubuntu

Если проекты разрабатываются на локальной машине, то для отладки отправки сообщений нужно как-то эти сообщения отобразить. И тут есть 2 варианта: настроить mail сервер, который будет действительно отправлять все сообщения на почту, либо просто писать все сообщения в лог файл.

Я предпочитаю второй вариант. Он в свою очередь так же имеет 2 пути решения.

Простое решение

Самый простой: открываем настройки php

sudo nano /etc/php5/apache2/php.ini

Там ищем строку

sendmail_path =

и меняем ее на

sendmail_path = "cat >> Системный/путь/до/файла.log"

Не забыл указать права 777 на этот файл.

Решение посложнее

Этот вариант я раньше, но делает он примерно тоже самое, только сложнее.

sudo nano /usr/local/bin/phpsendmail

Туда добавляем следующее

#!/usr/bin/php
<?php

/*
  This script is a sendmail wrapper for php to log calls of the php mail() function.
  Author: Till Brehm, www.ispconfig.org
  (Hopefully) secured by David Goodwin <david @ _palepurple_.co.uk>
*/

	$sendmail_bin = '/usr/sbin/sendmail';
	$logfile = '/path/to/php.mail.log';

//* Get the email content
$logline = '';
$pointer = fopen('php://stdin', 'r');

while ($line = fgets($pointer)) {
	if(preg_match('/^to:/i', $line) || preg_match('/^from:/i', $line)) {
		$logline .= trim($line).' ';
	}
	$mail .= $line;
}

//* compose the sendmail command
$command = 'echo ' . escapeshellarg($mail) . ' | '.$sendmail_bin.' -t -i';
for ($i = 1; $i < $_SERVER['argc']; $i++) {
	$command .= escapeshellarg($_SERVER['argv'][$i]).' ';
}



//* Write the log
file_put_contents($logfile, "\n\n" . date('Y-m-d H:i:s') . ' ' . $_ENV['PWD'] . ' mailtext: ' . $logline . "\n" . $mail, FILE_APPEND);
//* Execute the command
return shell_exec($command);
?>

Делаем его исполняемым

sudo chmod +x /usr/local/bin/phpsendmail

И не забываем создать лог файл, по идее в /var/log/ надо класть, но можно куда угодно. Кстати, в коде выше, переменная $logfile должна указывать на правильный файл.

$logfile
sudo touch /path/to/php.mail.log
sudo chmod 777 /path/to/php.mail.log

Дальше идем в php.ini

sudo nano /etc/php5/apache2/php.ini

И там указываем скрипт исполнения, это параметр sendmail_path

sendmail_path = /usr/local/bin/phpsendmail

Вот собственно и все.

И да, не забываем перезапустить apach

sudo /ets/init.d/apache2 restart

Второе решение взял тут.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.