From f6d6743b4d6246c85d2eda2770adf1d782124680 Mon Sep 17 00:00:00 2001 From: Leon Date: Wed, 6 Aug 2025 21:23:11 +0200 Subject: [PATCH] fix: throw error if folder select fails --- backend/app/services/email_processor.py | 8 +++++++- backend/app/tests/test_core.py | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend/app/services/email_processor.py b/backend/app/services/email_processor.py index 562df62..d395f7c 100644 --- a/backend/app/services/email_processor.py +++ b/backend/app/services/email_processor.py @@ -38,7 +38,13 @@ def _connect_to_imap(settings: Settings) -> imaplib.IMAP4_SSL | None: logger.info(f"Connecting to IMAP server: {settings.imap_server}") mail = imaplib.IMAP4_SSL(settings.imap_server) mail.login(settings.imap_username, settings.imap_password) - mail.select(settings.search_folder) + status, messages = mail.select(settings.search_folder) + if status != "OK": + logger.error( + f"Failed to select mailbox: {settings.search_folder}, status: {status}, messages: {messages}" + ) + mail.logout() + return None logger.info(f"Selected mailbox: {settings.search_folder}") return mail except Exception as e: diff --git a/backend/app/tests/test_core.py b/backend/app/tests/test_core.py index 19e02b6..502d794 100644 --- a/backend/app/tests/test_core.py +++ b/backend/app/tests/test_core.py @@ -65,8 +65,8 @@ def test_process_emails(mock_imap, db_session: Session): # Mock IMAP connection and email fetching mock_mail = MagicMock() mock_imap.return_value = mock_mail - mock_mail.login.return_value = (None, None) - mock_mail.select.return_value = (None, None) + mock_mail.login.return_value = ("OK", [b"Login successful"]) + mock_mail.select.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"]) # Mock email content @@ -150,6 +150,8 @@ def test_process_emails_auto_add_sender(mock_imap, db_session: Session): mock_mail = MagicMock() mock_imap.return_value = mock_mail + mock_mail.login.return_value = ("OK", [b"Login successful"]) + mock_mail.select.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"]) mock_msg_bytes = b"From: New Sender \nSubject: New Email\nMessage-ID: \n\nHello" mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)]) @@ -195,6 +197,8 @@ def test_process_emails_no_move_or_read(mock_imap, db_session: Session): mock_mail = MagicMock() mock_imap.return_value = mock_mail + mock_mail.login.return_value = ("OK", [b"Login successful"]) + mock_mail.select.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"]) mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: \n\nTest Body" mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)]) @@ -235,6 +239,8 @@ def test_process_emails_avoids_duplicates(mock_imap, db_session: Session): mock_mail = MagicMock() mock_imap.return_value = mock_mail + mock_mail.login.return_value = ("OK", [b"Login successful"]) + mock_mail.select.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"]) # This email has the same Message-ID as the one we just created mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: \n\nTest Body"