From 81a7b34101c4ffbfaa3a9d84082e17ae07d917ac Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 May 2023 23:32:21 -0700 Subject: [PATCH] Dont perform mail actions when rule filename filter not met Update mail.py --- src/paperless_mail/mail.py | 26 +++++++++++++--- src/paperless_mail/tests/test_mail.py | 45 +++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 45cf57aa1..de03a4861 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -725,11 +725,27 @@ class MailAccountHandler(LoggingMixin): f"by paperless", ) - queue_consumption_tasks( - consume_tasks=consume_tasks, - rule=rule, - message=message, - ) + if len(consume_tasks) > 0: + queue_consumption_tasks( + consume_tasks=consume_tasks, + rule=rule, + message=message, + ) + else: + # No files to consume, just mark as processed if it wasnt by .eml processing + if not ProcessedMail.objects.filter( + rule=rule, + uid=message.uid, + folder=rule.folder, + ).exists(): + ProcessedMail.objects.create( + rule=rule, + folder=rule.folder, + uid=message.uid, + subject=message.subject, + received=message.date, + status="PROCESSED_WO_CONSUMPTION", + ) return processed_attachments diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 0ca32663a..e69dbbef8 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -222,7 +222,7 @@ class TestMail( self, attachments: Union[int, List[_AttachmentDef]] = 1, body: str = "", - subject: str = "the suject", + subject: str = "the subject", from_: str = "noone@mail.com", to: Optional[List[str]] = None, seen: bool = False, @@ -539,7 +539,6 @@ class TestMail( tests = [ ("*.pdf", ["f1.pdf", "f2.pdf", "f3.pdf", "file.PDf", "f1.Pdf"]), ("f1.pdf", ["f1.pdf", "f1.Pdf"]), - ("f1", []), ("*", ["f1.pdf", "f2.pdf", "f3.pdf", "f2.png", "file.PDf", "f1.Pdf"]), ("*.png", ["f2.png"]), ] @@ -564,6 +563,48 @@ class TestMail( ], ) + def test_filename_filter_inline_no_consumption(self): + """ + GIVEN: + - Rule that processes all attachments but filters by filename + WHEN: + - Given email with inline attachment that does not meet filename filter + THEN: + - Mail action should not be performed + """ + message = self.create_message( + attachments=[ + _AttachmentDef( + filename="test.png", + disposition="inline", + ), + ], + ) + self.bogus_mailbox.messages.append(message) + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + account.save() + rule = MailRule( + name=str(uuid.uuid4()), + assign_title_from=MailRule.TitleSource.FROM_FILENAME, + account=account, + filter_attachment_filename="*.pdf", + attachment_type=MailRule.AttachmentProcessing.EVERYTHING, + action=MailRule.MailAction.DELETE, + ) + rule.save() + + self.assertEqual(len(self.bogus_mailbox.messages), 4) + + self.mail_account_handler.handle_mail_account(account) + self.apply_mail_actions() + + self.assertEqual(len(self.bogus_mailbox.messages), 1) + def test_handle_mail_account_mark_read(self): account = MailAccount.objects.create( name="test",