fix: restore deleted_at mails when still on IMAP server — sync was permanently hiding mails
- When IMAP delete fails, deleted_at stays set but mail remains on IMAP server - Sync was skipping deleted_at mails, so they stayed permanently hidden - Now sync restores deleted_at=None when mail is found on IMAP server - This means: if IMAP delete fails, mail reappears in LeoCRM on next sync - Only truly deleted mails (removed from IMAP server) stay hidden
This commit is contained in:
@@ -662,9 +662,12 @@ async def imap_sync_folder(
|
||||
).scalar_one_or_none()
|
||||
|
||||
if existing_mail:
|
||||
# Don't touch soft-deleted mails — they're being deleted via sync queue
|
||||
# If mail has deleted_at but is still on the IMAP server,
|
||||
# the IMAP delete failed — restore it so it's visible again.
|
||||
# This prevents mails from being permanently hidden when IMAP delete fails.
|
||||
if existing_mail.deleted_at is not None:
|
||||
continue
|
||||
existing_mail.deleted_at = None
|
||||
logger.info("imap_sync_folder: restored mail %s (still on IMAP server, delete had failed)", existing_mail.id)
|
||||
# Update folder_id and imap_uid if mail moved to a different folder
|
||||
if existing_mail.folder_id != folder.id:
|
||||
existing_mail.folder_id = folder.id
|
||||
@@ -1157,9 +1160,11 @@ async def imap_sync_account(
|
||||
).scalar_one_or_none()
|
||||
|
||||
if existing_mail:
|
||||
# Don't touch soft-deleted mails — they're being deleted via sync queue
|
||||
# If mail has deleted_at but is still on the IMAP server,
|
||||
# the IMAP delete failed — restore it so it's visible again.
|
||||
if existing_mail.deleted_at is not None:
|
||||
continue
|
||||
existing_mail.deleted_at = None
|
||||
logger.info("imap_sync_account: restored mail %s (still on IMAP server, delete had failed)", existing_mail.id)
|
||||
# Track folder moves: update folder_id and imap_uid if the
|
||||
# mail now appears in a different IMAP folder.
|
||||
if existing_mail.folder_id != folder.id:
|
||||
|
||||
Reference in New Issue
Block a user