Блин, у меня что-то накопилось много материалов по Linux. В общем, прорвало - пока они не кончатся, буду писать. Тактм образом, на некое число постов это будет блог про Linux=) Но ничего, уже подбирается материла на альтернативвные темы...
Итак, родилась задача - нужно для отладки скриптов сделать заглушку, которая бы принимала почту, которая отправляется php функцией mail() и складывала бы ее в отдельную директорию. Почему заглушка? Ставить и настраивать ради такого полноценный почтовый сервер ну никак не хотелось. Тем более, что в том же Денвере под винду все решено - значит, и под Linux решение есть.
Итак, погуглив, нашел решение на Хабре: http://habrahabr.ru/post/49665/
А погуглив еще - нашел дополение на форуме php http://php.ru/forum/viewtopic.php?t=12140
А теперь по шагам, для памяти:
1) Создаем скрипт, который будем эмулировать sendmail:
sudo nano /usr/bin/sendmail-www.sh
содержание:
#!/bin/sh
prefix="/home/alexander/WWW-mail/new"
numPath="/home/alexander/WWW-mail"
if [ ! -f $numPath/num ]; then
echo "0" > $numPath/num
fi
num=`cat $numPath/num`
num=$(($num + 1))
echo $num > $numPath/num
name="$prefix/letter_$num.txt"
cat >> $name
chmod 777 $name
/bin/true
[pre]
примечание: содержание взято с форума php - как более кошерное, по моему мнению.
примечание 2: смысл скрипта очень прост, на самом деле - перенаправление стандартного потока вывода
2) делаем скрипт исполнимым:
[pre]
sudo chmod +x /usr/bin/sendmail-www.sh
3) в скрипте есть две перемменных - prefix и numPath. Надо выставить на эти папки права 777 (ну, строго говоря, дать права на запись в них всем, но я не парился, тк. локальная машина, то и 777 сойдет):
sudo chmod 777 /home/alexander/WWW-mail
sudo chmod 777 /home/alexander/WWW-mail/new
4) ну вроде все хорошо, приступаем ко второй части марлезонского балета. Настраиваем php, чтобы он использовал наашу заглушку для работы
открываем на редактирование php.ini:
sudo nano /etc/php5/apache2/php.ini
(путь для Mint - ну и соответственно для Убунты)
Находим секцию [mail function]
там раскоментируем и изменяем строку с sendmail_path:
sendmail_path = /usr/bin/sendmail-www.sh
и заодно включаем логирование отправки почты из php:
mail.log = /home/alexander/WWW-mail/mail.log
5) перезагружаем apache:
sudo /etc/init.d/apache2 reload
(не забываем про Sudo, а то можно налететь на ошибки вида
* Starting web server apache2 /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
что естественно - прав-то не хватает)
Профит, все работает как надо.