diff --git a/imap_filter/imap_filter.py b/imap_filter/imap_filter.py index 69212cc..5fe20e3 100644 --- a/imap_filter/imap_filter.py +++ b/imap_filter/imap_filter.py @@ -222,11 +222,14 @@ class ImapFilter: else: field = 'From' if 'regexp' in mfilter: - self._log.debug( - "Filter look for %s regular expressions", - len(mfilter['regexp']) - ) - condition = f'allof (header :contains "{field}" "{mfilter['regexp']}")' + if not isinstance(mfilter['regexp'], list): + mfilter['regexp'] = [ mfilter['regexp'] ] + for regexp in mfilter['regexp']: + self._log.debug( + "Filter look for %s regular expressions", + len(regexp) + ) + condition = f'allof (header :contains "{field}" "{regexp}")' else: self._log.debug( "Filter look for %s words", @@ -302,32 +305,33 @@ class ImapFilter: field_data = raw_field_data[0] else: field_data = raw_field_data[0].decode() - if 'words' in mfilter: - regexp = '^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)' + if 'regexp' in mfilter: + if not isinstance(mfilter['regexp'], list): + mfilter['regexp'] = [ mfilter['regexp'] ] + elif 'words' in mfilter: + mfilter['regexp'] = ['^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)'] else: - if 'regexp' in mfilter: - regexp = mfilter['regexp'] - else: - self._log.error( + self._log.error( "The filter '%s' doesn't have a 'words' or 'regexp' value. %s", mfilter['name'], mfilter ) - return {"match": False} - match = re.match(regexp, field_data) - if match: - self._log.info( - "Field '%s' => '%s', matches filter '%s'", - mfilter['field'], - field_data, - mfilter['name'] - ) - self.mailbox_matches += 1 - if self.config['dummy']: - self._log.info('Doing nothing (dummy run)') - else: - self._do_filter(message_id, mfilter) - return {"match": True} + return {"match": False} + for regexp in mfilter['regexp']: + match = re.match(regexp, field_data) + if match: + self._log.info( + "Field '%s' => '%s', matches filter '%s'", + mfilter['field'], + field_data, + mfilter['name'] + ) + self.mailbox_matches += 1 + if self.config['dummy']: + self._log.info('Doing nothing (dummy run)') + else: + self._do_filter(message_id, mfilter) + return {"match": True} return {"match": False} def _do_filter(self, message_id, mfilter):