Ты администратор виртуального хостинга? Тебя задолбали скриптовые спам-машины? Часто приходят абузы? ОК! Меня это всё доставало не меньше. Я перерыл море форумов и перечитал кучу разных советов. В итоге пришёл к тому, что ни один из найденных мной вариантов не работает у меня. Ну как говорят, если хочешь что то сделать хорошо – делай это сам. Как я, собственно и поступил.
Берём себя в руки, и начинаем действовать. :)
Патчить будем вручную, т.к. а) мне было лень делать патч; б) так мы меньше зависим от версий… От 5.2.17 до 5.3.3 всё точно работает. Проверял лично.
Теперь сама суть:
Распаковываем исходники php. Переходим в директорию ./php-5.x.x/ext/standard и ищем там файл mail.c.
Открываем его в каком-нибудь удобном редакторе. Находим строку
#include "exec.h"
и вставляем после неё
#include "main/php_syslog.h" #include "zend_execute.h"
Затем находим строки, похожие на
/* {{{ php_mail */ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) { #if (defined PHP_WIN32 || defined NETWARE) int tsm_err; char *tsm_errmsg = NULL; #endif FILE *sendmail; int ret; char *sendmail_path = INI_STR("sendmail_path"); char *sendmail_cmd = NULL; char *mail_log = INI_STR("mail.log"); char *hdr = headers; #if PHP_SIGCHILD void (*sig_handler)() = NULL; #endif
И вставляем после них
/* php_mail logging */ php_syslog(LOG_NOTICE | LOG_LOCAL0, "%s sending mail to <%s> [%s]\n" , (char*)zend_get_executed_filename(TSRMLS_C), to, subject); /* end */
А теперь сохраняем, и собираем php.
После установки необходимо настроить вывод логов. Если внимательно взглянуть на код, становится ясно, что логи обрабатываются с помощью syslog. После установки, логи автоматически начнут сыпаться в messages, но нас такой вариант не устраивает, по этому, открываем конфиг /etc/rsyslog.conf и добавляем строку
local0.* /var/log/php_mail.log
Сохраняем, и перезагружаем rsyslog
service rsyslog restart
Запускаем тестовый скрпит
<?php mail(‘test@yourmail.com’,’test’,’test’) ?>
Смотрим в /var/log/php_mail.log и радуемся жизни! :)
Ах да… Если хотите меня отблагодарить, за столь полезную штуку, можете отправить мне столько, сколько не жалко на мой кошелёк Z376335536674 или R220694861060 :)