Test all parts of field data

This commit is contained in:
Antonio J. Delgado 2024-12-29 11:50:13 +02:00
parent 19423232e8
commit cf03a5d3ce

View file

@ -215,41 +215,42 @@ class ImapFilter:
"Decoded field: %s",
decoded_field
)
if isinstance(decoded_field[0][0], str):
field_data = decoded_field[0][0]
else:
field_data = decoded_field[0][0].decode()
if 'words' in mfilter:
regexp = '^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)'
else:
if 'regexp' in mfilter:
regexp = mfilter['regexp']
for raw_field_data in decoded_field:
if isinstance(raw_field_data[0], str):
field_data = raw_field_data[0]
else:
self._log.error(
"The filter '%s' doesn't have a 'words' or 'regexp' value. %s",
mfilter['name'],
mfilter
)
return {"match": False}
self._log.debug(
"Testing match for '%s' in '%s'...",
regexp,
field_data
)
match = re.match(regexp, field_data)
if match:
self._log.info(
"Field '%s' => '%s', matches filter '%s'",
mfilter['field'],
field_data,
mfilter['name']
field_data = raw_field_data[0].decode()
if 'words' in mfilter:
regexp = '^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)'
else:
if 'regexp' in mfilter:
regexp = mfilter['regexp']
else:
self._log.error(
"The filter '%s' doesn't have a 'words' or 'regexp' value. %s",
mfilter['name'],
mfilter
)
return {"match": False}
self._log.debug(
"Testing match for '%s' in '%s'...",
regexp,
field_data
)
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}
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):