diff options
Diffstat (limited to 'internal/imap/connection.go')
-rw-r--r-- | internal/imap/connection.go | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/internal/imap/connection.go b/internal/imap/connection.go index 68b7e6b..431d1dc 100644 --- a/internal/imap/connection.go +++ b/internal/imap/connection.go @@ -130,10 +130,12 @@ func (conn *connection) ensureFolder(folder Folder) error { func (conn *connection) delete(uids []uint32) error { storeItem := imap.FormatFlagsOp(imap.AddFlags, true) + deleteFlag := []interface{}{imap.DeletedFlag} + seqSet := new(imap.SeqSet) seqSet.AddNum(uids...) - if err := conn.c.UidStore(seqSet, storeItem, imap.DeletedFlag, nil); err != nil { + if err := conn.c.UidStore(seqSet, storeItem, deleteFlag, nil); err != nil { return fmt.Errorf("marking as deleted: %w", err) } @@ -189,11 +191,19 @@ func (conn *connection) replace(folder Folder, header, value, newContent string, return err } + // filter \Seen --> updating should be noted :) + filteredFlags := make([]string, 0, len(flags)) + for _, f := range flags { + if f != imap.SeenFlag && f != imap.RecentFlag { + filteredFlags = append(filteredFlags, f) + } + } + if err = conn.delete(msgIds); err != nil { return err } - if err = conn.append(folder, flags, newContent); err != nil { + if err = conn.append(folder, filteredFlags, newContent); err != nil { return err } |