Fix: truncate mail subjects to field max length (#13991)

This commit is contained in:
shamoon
2026-09-05 01:52:18 -07:00
committed by GitHub
parent 06234f4f64
commit f1679a2ee3
2 changed files with 35 additions and 4 deletions
+4 -4
View File
@@ -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,
+31
View File
@@ -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=[