Vpopmail maildrop
После того как одного сотрудника замучил SPAM (его раздражало любое кол-во спама), он попросил жестко прописать список почтовых адресов с которого он мог получать письма.
Решение:
На этом сервере стоял qmail+vpopmail, а так же maildrop, решение было тривиальным:
Создаем файл .qmail
В папке vpopmail-пользователя (что то типа /usr/local/vpopmail/domains/mydomain.ru/user, в этой папке есть папка Maildir) создаем DOT-файл .qmail:
# cat .qmail |/usr/local/bin/maildrop ./mailfilter
Со следующими правами: -rw------- 1 vpopmail vchkpw 71 20 ноя 15:43 .qmail
Создаем файл правил mailfilter
В той же папке создаем файл mailfilter:
# cat mailfilter
#VERBOSE=9 #logfile "/var/log/maildrop/maildrop.log" if (/^From:.*(test\@yandex\.ru|mail\.ru)/) { exception { to "./Maildir/" # log "mail ok" } }
Со следующими правами: -rw------- 1 vpopmail vchkpw 71 20 ноя 15:45 mailfilter
Итог
В итоге все письма которые поподают под регулярное выражение /^From:.*(test\@yandex\.ru|mail\.ru)/ попадут в Maildir-папку пользователя, в поддиректорию new, а именно пользователь в этом примере получит письма от почтового ящика test@yandex.ru и от всех пользователей в адресе которых есть домен mail.ru
Кстати регулярные выражения можно создавать и по другим полям Subject:. To:. X-Spam-Status: YES и др. (смотри поля заголовка писем).
Так же кол-во секций if может быть несколько и на каждое условие можно организовать свою реакцию. (Внимание! Действие to может передавать только в mailbox-формате в этом случае надо указать путь с точностью до файла, либо maildir-формате тогда нужно указать папку формата Maildir, если она не создана, то воспользоватся утилитой maildirmake. Не пытайтесь указывать какую нибудь поддиректорию внутри Maildir например /Maildir/cur - так не работатает)