From 9c96fa793ad30e2e074529cf85e010ad7419dfd1 Mon Sep 17 00:00:00 2001 From: disqualifier Date: Mon, 6 Jul 2026 00:15:55 -0400 Subject: [PATCH] fix: select() on the requested folder despite a failed old-folder reselect _connect_and_reselect_locked() re-selects the prior _selected_folder after reconnecting and returns False if that reselect fails, even when the underlying link came back live. select() gated entirely on that bool, so it returned False without ever sending a SELECT for the folder the caller actually asked for - retrieve_otp's per-folder loop then silently skips a folder a live connection could have selected, for that pass. Let select() proceed to its own SELECT whenever the connection is live (self._mail is not None), only bailing out when ensure_connection reflects an unreconnectable link. Signed-off-by: disqualifier --- src/aiomail/client.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/aiomail/client.py b/src/aiomail/client.py index 8d06419..7116e95 100644 --- a/src/aiomail/client.py +++ b/src/aiomail/client.py @@ -183,8 +183,13 @@ class IMAPClient: return folders async def select(self, folder: str) -> bool: - """select a folder, returning whether it succeeded""" - if not await self.ensure_connection(): + """select a folder, returning whether it succeeded + + connects/reconnects first if needed; a failed re-select of the *previously* + selected folder during reconnect does not block attempting this call's own + target folder, since a live connection can still select it. + """ + if not await self.ensure_connection() and self._mail is None: return False try: result, _ = await self._mail.select(f'"{folder}"')