diff --git a/backend/app/services/email_processor.py b/backend/app/services/email_processor.py index a91730d..bed25ac 100644 --- a/backend/app/services/email_processor.py +++ b/backend/app/services/email_processor.py @@ -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}" ) diff --git a/backend/app/tests/test_core.py b/backend/app/tests/test_core.py index 29809ab..19e02b6 100644 --- a/backend/app/tests/test_core.py +++ b/backend/app/tests/test_core.py @@ -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")