diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 5f7e29561..8e9170a6b 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -300,7 +300,7 @@ def apply_mail_action( folder=rule.folder, uid=message_uid, uid_validity=uid_validity, - subject=message_subject, + subject=message_subject[:256], received=message_date, status="SUCCESS", ) @@ -312,7 +312,7 @@ def apply_mail_action( folder=rule.folder, uid=message_uid, uid_validity=uid_validity, - subject=message_subject, + subject=message_subject[:256], received=message_date, status="FAILED", error=traceback.format_exc(), @@ -347,7 +347,7 @@ def error_callback( uid=message_uid, uid_validity=uid_validity, defaults={ - "subject": message_subject, + "subject": message_subject[:256], "received": received, "status": "FAILED", "error": traceback.format_exc(), @@ -947,7 +947,7 @@ class MailAccountHandler(LoggingMixin): folder=rule.folder, uid_validity=self._current_uid_validity, defaults={ - "subject": message.subject, + "subject": message.subject[:256], "received": make_aware(message.date) if is_naive(message.date) else message.date, diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index bba505175..3a128fd4e 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -665,6 +665,37 @@ class TestMail( 1, ) + def test_handle_empty_message_long_subject(self) -> None: + """ + GIVEN: + - A mail with no attachments and a subject longer than the + ProcessedMail.subject field + WHEN: + - The mail is handled by an attachments-only rule + THEN: + - The subject is truncated to the field length instead of raising + """ + message = self.mailMocker.messageBuilder.create_message( + subject="A" * 300, + attachments=[], + ) + + account = MailAccount.objects.create() + rule = MailRule.objects.create( + account=account, + consumption_scope=MailRule.ConsumptionScope.ATTACHMENTS_ONLY, + ) + + self.mail_account_handler._handle_message(message, rule) + + processed = ProcessedMail.objects.get( + rule=rule, + uid=message.uid, + folder=rule.folder, + ) + self.assertEqual(processed.status, "PROCESSED_WO_CONSUMPTION") + self.assertEqual(processed.subject, "A" * 256) + def test_handle_unknown_mime_type(self) -> None: message = self.mailMocker.messageBuilder.create_message( attachments=[