Add error handling for IMAP STORE and APPEND operations (#30)

This commit is contained in:
Nathan Moinvaziri 2026-02-08 17:30:36 -08:00 committed by GitHub
parent b19e71c965
commit 11bcbb311f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 13 deletions

View File

@ -213,7 +213,9 @@ def append_email(
else:
normalized_flags = f"({stripped})"
resp, _ = imap_conn.append(f'"{folder_name}"', normalized_flags, date_str, raw_content)
resp, data = imap_conn.append(f'"{folder_name}"', normalized_flags, date_str, raw_content)
if resp != "OK":
safe_print(f"APPEND failed for {folder_name}: {resp} {data}")
return resp == "OK"
@ -650,10 +652,12 @@ def sync_flags_on_existing(imap_conn, folder_name, message_id, flags, size):
if flags_to_add:
flags_str = " ".join(flags_to_add)
typ, _ = imap_conn.store(msg_num, "+FLAGS", f"({flags_str})")
typ, data = imap_conn.store(msg_num, "+FLAGS", f"({flags_str})")
if typ == "OK":
for flag in flags_to_add:
safe_print(f" -> Synced flag: {flag}")
else:
safe_print(f"STORE +FLAGS failed for {message_id} in {folder_name}: {typ} {data}")
except Exception as e:
safe_print(f"Error syncing flags for {message_id} in {folder_name}: {e}")

View File

@ -283,7 +283,7 @@ def process_single_uid(
imap_common.sync_flags_on_existing(dest, target_folder, msg_id, flags, size)
else:
valid_flags = f"({flags})" if (preserve_flags and flags) else None
imap_common.append_email(
success = imap_common.append_email(
dest,
target_folder,
msg_content,
@ -291,10 +291,13 @@ def process_single_uid(
valid_flags,
ensure_folder=False,
)
safe_print(f"[{target_folder}] {'COPIED':<12} | {size_str:<8} | {subject[:40]}")
if preserve_flags and flags:
for flag in flags.split():
safe_print(f" -> Applied flag: {flag}")
if success:
safe_print(f"[{target_folder}] {'COPIED':<12} | {size_str:<8} | {subject[:40]}")
if preserve_flags and flags:
for flag in flags.split():
safe_print(f" -> Applied flag: {flag}")
else:
safe_print(f"[{target_folder}] FAILED | {size_str:<8} | {subject[:40]}")
# Update cache if processed effectively (copied or duplicate)
if msg_id:
@ -328,18 +331,20 @@ def process_single_uid(
dest.select(f'"{label_folder}"')
if not imap_common.message_exists_in_folder(dest, msg_id):
valid_flags = f"({flags})" if (preserve_flags and flags) else None
imap_common.append_email(
if imap_common.append_email(
dest,
label_folder,
msg_content,
date_str,
valid_flags,
ensure_folder=False,
)
safe_print(f" -> Applied label: {label}")
if preserve_flags and flags:
for flag in flags.split():
safe_print(f" -> Applied flag: {flag}")
):
safe_print(f" -> Applied label: {label}")
if preserve_flags and flags:
for flag in flags.split():
safe_print(f" -> Applied flag: {flag}")
else:
safe_print(f" -> Failed to apply label {label}")
elif preserve_flags and flags:
imap_common.sync_flags_on_existing(dest, label_folder, msg_id, flags, size)
except Exception as e: