fix: delete moves to Trash instead of expunging

MC /delete was hard-deleting (IMAP expunge), making emails
unrecoverable. Now uses moveMessage to Trash folder instead.
This commit is contained in:
James 2026-02-08 02:35:24 -05:00
parent d8a99b5bd2
commit 8e3845876b
1 changed files with 2 additions and 39 deletions

View File

@ -319,45 +319,8 @@ func (e *EmailConnector) Archive(sourceID string) error {
}
func (e *EmailConnector) Delete(sourceID string) error {
client, err := e.connect()
if err != nil {
return err
}
defer client.Close()
var uid uint32
if _, err := fmt.Sscanf(sourceID, "%d", &uid); err != nil {
return fmt.Errorf("invalid source ID: %s", sourceID)
}
folders := e.config.Watch
if len(folders) == 0 {
folders = []string{"INBOX"}
}
for _, folder := range folders {
_, err := client.Select(folder, nil).Wait()
if err != nil {
continue
}
uidSet := imap.UIDSetNum(imap.UID(uid))
// Mark deleted
storeCmd := client.Store(uidSet, &imap.StoreFlags{
Op: imap.StoreFlagsAdd,
Silent: true,
Flags: []imap.Flag{imap.FlagDeleted},
}, nil)
storeCmd.Close()
// Expunge
expungeCmd := client.Expunge()
expungeCmd.Close()
return nil
}
return fmt.Errorf("message not found: %s", sourceID)
// Move to Trash instead of hard-deleting (expunging)
return e.moveMessage(sourceID, "Trash")
}
func (e *EmailConnector) moveMessage(sourceID, destFolder string) error {