7

I am using MailKit/MimeKit 1.2.7 (latest NuGet version).

Deleting an email with the ImapClient is pretty easy ...

client.Inbox.AddFlags(uniqueId, MessageFlags.Deleted, silent: true);

... if you know the emails UniqueId or its Index.

In my case, I don't know either one nor the other. All I have is the message itself (MimeMessage) ad its MessageId.

I was hoping that MessageId == UniqueId, but obviously this is not the case.

Do I have any chance to delete an email by just having the corresponding MimeMessage/MessageId?

jstedfast
  • 35,744
  • 5
  • 97
  • 110
Ingmar
  • 1,525
  • 6
  • 34
  • 51

1 Answers1

11

You could try doing something like this:

var uids = folder.Search (SearchQuery.HeaderContains ("Message-Id", message.MessageId));
folder.AddFlags (uids, MessageFlags.Deleted, silent: true);

Ideally, though, you'd keep track of the UniqueId that you used to fetch the message so that you can just use that value.

jstedfast
  • 35,744
  • 5
  • 97
  • 110
  • Excellent! Works great. Thanks so much. – Ingmar Jul 15 '15 at 18:36
  • What is a unique ID and where do I get it? I can retrieve messages without ever seeing a unique ID, so there's no "keeping track" of it. The index seems like a very dangerous thing because messages could come and go while I'm iterating the folder. I'd just like to delete a message, like `message.Delete()` or `folder.Delete(message)`. – ygoe Sep 27 '20 at 14:48
  • UIDs can be gotten from a `folder.Search()` query or from a `folder.Fetch()` if you request the `MessageSummaryItems.UniqueId`. This is just how the protocol works. – jstedfast Sep 27 '20 at 15:09