Если проекты разрабатываются на локальной машине, то для отладки отправки сообщений нужно как-то эти сообщения отобразить. И тут есть 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
Второе решение взял тут.