add option for multiple regexp too

This commit is contained in:
Antonio J. Delgado 2025-03-17 13:36:05 +02:00
parent 33b49b88e9
commit b4464ce579

View file

@ -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):