Test all parts of field data
This commit is contained in:
parent
19423232e8
commit
cf03a5d3ce
1 changed files with 34 additions and 33 deletions
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue