FreeBSD 5.0 + sendmail + spamassasin + procmail
МЭНы и конфу читал, но пока не получается...Стоит SpamAssasin и метит всю почту своими тэгами. Задача в следующем - организовать через procmail следующий алгоритм:
Если X-Spam-Flag: YES, то
Если score > 20, то письмо удалить,
Если 10 < score < 20, то перенаправить письмо на spam@maycorp.ru,
Если score < 10, то с письмом ничего не делать (т.е. оправить дальше юзеру)
Конец Если.
Что не получается:
1) procmail обрабатывает только почту приходящую на _локальные_ ящики сервера, но у меня несколько доменов и для многих из них стоит в virtualusertable
@mycorp2.ru %1@smtp.mycorp2.ru
@mycorp3.ru %1@smtp.mycorp3.ru
т.к. внешний SMTP сервер один для всех доменов, а maycorpXYZ.ru находяться в корпоративной локалке.
Так вот, Procmail не обрабатывает письма для таких доменов.
============ sendmail.mc =================
divert(-1)
divert(0)
VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.27 2002/10/16 22:52:56 keramida Exp $
OSTYPE(freebsd5)
DOMAIN(generic)
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(`local_procmail')
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
define(`confMILTER_LOG_LEVEL',`6')
MAILER(procmail)dnl
MAILER(local)
MAILER(smtp)
============ sendmail.mc =================
2) Не могу понять как в /usr/local/etc/procmailrc писать условия... Данная конструкция ессно не работает, но хочется что-то именно такого:
======= procmailrc =======
:0
* ^X-Spam-Flag: YES # если спам
* !^X-Sender: Procmail # и не проходило проверку
{
| formail -A"X-Sender: Procmail" # отметить что проверку прошло
:0
* ^X-Spam-Status: *(score > 20) # в зависимости от балла
| sendmail > /dev/null # удаляем
:0
* ^X-Spam-Status: *(10 < score < 20)
| formail -I"To: spam@maycorp.ru | sendmail -t # отправляем на дальнейшее рассмотрение
# как сделать чтоб в письме пришедшем на spam@maycorp.ru в поле TO: стоял адрес,
# на кот. письмо шло изначально, а не "spam@maycorp.ru"?
}
# иначе отправляем как есть
======= procmailrc =======