From 5c58e1852a3147edb26cba113c1fc8bc92b40997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20N=C3=A1jera?= Date: Sun, 18 Oct 2020 22:03:51 +0200 Subject: [PATCH] Spam filter to work with flags from Rspamd and bogofilter Closes #299 --- afew/filters/HeaderMatchingFilter.py | 9 ++++++++- afew/filters/SpamFilter.py | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/afew/filters/HeaderMatchingFilter.py b/afew/filters/HeaderMatchingFilter.py index 5a735f7..7379dbc 100644 --- a/afew/filters/HeaderMatchingFilter.py +++ b/afew/filters/HeaderMatchingFilter.py @@ -22,7 +22,14 @@ def __init__(self, database, **kwargs): def handle_message(self, message): if self.header is not None and self.pattern is not None: if not self._tag_blacklist.intersection(message.get_tags()): - value = message.get_header(self.header) + if not isinstance(self.header, list): + self.header = [self.header] + + try: + value = next(filter(None, map(message.get_header, self.header))) + except StopIteration: + return + match = self.pattern.search(value) if match: sub = (lambda tag: diff --git a/afew/filters/SpamFilter.py b/afew/filters/SpamFilter.py index 9c88a38..b87efb3 100644 --- a/afew/filters/SpamFilter.py +++ b/afew/filters/SpamFilter.py @@ -6,8 +6,8 @@ class SpamFilter(HeaderMatchingFilter): message = 'Tagging spam messages' - header = 'X-Spam-Flag' - pattern = 'YES' + header = ['X-Spam-Flag', 'X-Spam', 'X-Bogosity'] + pattern = 'YES|Spam' def __init__(self, database, tags='+spam', spam_tag=None, **kwargs): if spam_tag is not None: