Задумал посчитать, сколько же трафика по мылу ходит, собрать статистику так сказать...
Идея такова, чтоб при локальной доставке письма оно оставляло след в табличке в базе данных, с какого ip, от кого, кому, размер письма.
Примерная, конечно, статистика (есть ведь еще отброшенные письма, есть письма, которые по редиректу уходят), но все же.
Создал в базе табличку
CREATE TABLE `stat` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(20) default NULL,
`mail_from` varchar(255) default NULL,
`h_from` varchar(255) default NULL,
`rcpt_to` varchar(255) default NULL,
`h_to` varchar(255) default NULL,
`spam_score_int` int(11) default NULL,
`bytes` bigint(20) NOT NULL default "0",
`local` tinyint(4) NOT NULL default "0",
`curr_date` datetime default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `IX_stat` (`id`,`local`),
KEY `IX_stat_1` (`rcpt_to`)
) TYPE=MyISAM
Вставил в перловый скрипт (exim.pl, который уже мучали все кому не лень в предыдущих статьях

функцию для вставки строки (скрипт привожу ниже), поменял папку локальной доставки (сделал так, чтоб функция insert_stat отрабатывала, возвращая пустую строку):
address_delivery:
directory = ...
/${perl {insert_stat}{$acl_c4}{$acl_c5}{$local_part@$domain}{$acl_c0}{$acl_c1}{$acl_c3}{$acl_c9}}
А переменные $acl_cх необходимо проинициализировать в acl, т.к. в блоке локальной доставки не все доступно, а глобальные переменные - пожалуйста!
acl_check_message:
warn message =
set acl_c0 = ${perl{header_decode}{$rheader_from:}}
set acl_c1 = ${perl{header_decode}{$rheader_to:}}
set acl_c2 = ${perl{header_decode}{$rheader_subject:}}
set acl_c3 = $spam_score_int
set acl_c4 = $sender_host_address
set acl_c5 = $sender_address
set acl_c9 = $message_size
... и чтоб балл спама проинициализировать корректно, добавил строку в блок проверки на спам
warn message = X-Spam-Score: $spam_score ($spam_bar)
spam = nobody:true
set acl_c3 = $spam_score_int
Теперь имеем в таблице stat кучу записей, которые можно потом обрабовать как душе угодно!