fix: imap fetch marks mails as read

This commit is contained in:
Leon
2025-07-22 12:29:58 +02:00
parent f84d6aa652
commit 390c972315
2 changed files with 11 additions and 4 deletions

View File

@@ -92,7 +92,7 @@ def _process_single_email(
settings: Settings,
) -> None:
"""Process a single email message."""
status, data = mail.fetch(num, "(RFC822)")
status, data = mail.fetch(num, "(BODY.PEEK[])")
if status != "OK":
logger.warning(f"Failed to fetch email with id={num}")
return
@@ -129,8 +129,15 @@ def _process_single_email(
if extracted_body:
final_body = extracted_body
entry = EntryCreate(subject=subject, body=final_body, message_id=message_id)
create_entry(db, entry, newsletter.id)
entry_schema = EntryCreate(subject=subject, body=final_body, message_id=message_id)
new_entry = create_entry(db, entry_schema, newsletter.id)
if not new_entry:
logger.error(
f"Failed to create entry for newsletter '{newsletter.name}' from sender {sender}, email will not be marked as read or moved."
)
return
logger.info(
f"Created new entry for newsletter '{newsletter.name}' from sender {sender}"
)

View File

@@ -79,7 +79,7 @@ def test_process_emails(mock_imap, db_session: Session):
mock_mail.login.assert_called_once_with("test@test.com", "password")
mock_mail.select.assert_called_once_with("INBOX")
mock_mail.search.assert_called_once_with(None, "(UNSEEN)")
mock_mail.fetch.assert_called_once_with(b"1", "(RFC822)")
mock_mail.fetch.assert_called_once_with(b"1", "(BODY.PEEK[])")
mock_mail.store.assert_any_call(b"1", "+FLAGS", "\\Seen")
mock_mail.copy.assert_called_once_with(b"1", "Processed")
mock_mail.store.assert_any_call(b"1", "+FLAGS", "\\Deleted")