diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index facdd1d84e..8eca35cc06 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1132,10 +1132,24 @@ class Core { // Some providers do not list the new message yet try { + List delete = new ArrayList<>(); + + if (message.uid != null) + try { + Message iprev = ifolder.getMessageByUID(message.uid); + if (iprev != null) { + Log.i(folder.name + " found prev uid=" + message.uid + " msgid=" + message.msgid); + iprev.setFlag(Flags.Flag.DELETED, true); + delete.add(iprev); + } + } catch (Throwable ex) { + Log.w(ex); + } + Log.i(folder.name + " searching for added msgid=" + message.msgid); Message[] imessages = findMsgId(context, account, ifolder, message.msgid); if (imessages != null) { - Long found = null; + Long found = newuid; for (Message iexisting : imessages) try { @@ -1153,13 +1167,13 @@ class Core { if (newuid == null || found > newuid) newuid = found; - List delete = new ArrayList<>(); for (Message iexisting : imessages) try { long muid = ifolder.getUID(iexisting); if (muid < 0) continue; - if (muid < newuid) + if (muid < newuid && + (message.uid == null || message.uid != muid)) try { iexisting.setFlag(Flags.Flag.DELETED, true); delete.add(iexisting); @@ -1169,10 +1183,11 @@ class Core { } catch (MessageRemovedException ex) { Log.w(ex); } - - expunge(context, ifolder, delete); } } + + expunge(context, ifolder, delete); + } catch (MessagingException ex) { Log.w(ex); }