From cf03a5d3ce63ae793cc4b6b2c22a96a75b6bc2c9 Mon Sep 17 00:00:00 2001 From: "Antonio J. Delgado" Date: Sun, 29 Dec 2024 11:50:13 +0200 Subject: [PATCH] Test all parts of field data --- imap_filter/imap_filter.py | 67 +++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/imap_filter/imap_filter.py b/imap_filter/imap_filter.py index 40abacd..092dce0 100644 --- a/imap_filter/imap_filter.py +++ b/imap_filter/imap_filter.py @@ -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):