Блог Александра Башкирова

ИТ и бизнес, компьютеры и ПО, фото, программирование и просто мысли…
Этот сайт в основном посвящен тому, что мне интересно вне работы. Ведется в порядке хобби.
Все изложенное на сайте - мое частное оценочное мнение и не может быть истолковано иначе.
Со всеми вытекающими из этого последствиями.

Linux: Заглушка Sendmail для php-mail

Просмотров: 4783Комментарии: 0
Linux

Блин, у меня что-то накопилось много материалов по 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

что естественно - прав-то не хватает)

Профит, все работает как надо.

Оставьте комментарий!


Комментарий будет опубликован после проверки

     

  

(обязательно)