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:
parent
d8a99b5bd2
commit
8e3845876b
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue