Включение лога функции mail() в PHP (определяем кто отправляет спам с сайта)
Задача
Есть LAMP сервер с десятком вордпрессов. Необходимо выяснить кто из вордпрессов рассылает спам.
Решение
В php5.3 и выше есть возможность включить лог. для этого:
1). В php.ini
добавляем:
mail.add_x_header on mail.log /var/log/php-mail.log
2). Создаем файл и назначаем пава:
touch /var/log/php-mail.log chmod 666 /var/log/php-mail.log
3). Сделаем конфиг для логротейт /etc/logrotate.d/php-mail
:
/var/log/php-mail.log { missingok notifempty compress daily rotate 7 create 666 }
По умолчанию в лог пишется информация об отправителе, получателе и пути до скрипта, из которого вызывается функция mail()
.
В случае с wordpress, все его плагины отправляют письма через класс class-phpmailer
. Т.е. если нам необходимо выяснить какой конкретно плагин или скрипт отправляет почту, то необходимо включить дебаг.
Для этого в файле wp-includes/class-phpmailer.php
перед строкой 769 (вызов функии mail) добавить debug-backtrace
.
Как проверить?
Вот так:
<?php mail("pupkin@mail.ru", "test1", "Line 1\nLine 2\nLine 3"); ?>