pythonimapimap-tools

How to delete messages with imap-tools


I use the following code to delete messages from my IMAP server

uids = []
for msg in mailbox.fetch(filter):
    print(msg.uid, msg.date, msg.from_, msg.subject)
    uids.append(msg.uid)
mailbox.delete([msg.uid])

That doesn't delete the intended messages, though. If the filter returns e. g. 3 messages, only the first filtered message is deleted and then maybe two others (though I'm not sure about those two others).

I've read about MSNs that cause errors when used instead of UIDs when deleting messages. But I don't see the problem in the code above. Here is the example code from the repo which seems to work fine, but I don't understand the difference:

mailbox.delete([msg.uid for msg in mailbox.fetch()])

Can anybody point me in the right direction?


Solution

  • You collect message UIDs into a list (uids), and then remove only the last message (after the loop is finished).

    This is probably what you intended to do (minimal changes for clarity):

    uids = []
    for msg in mailbox.fetch(filter):
        print(msg.uid, msg.date, msg.from_, msg.subject)
        uids.append(msg.uid)
    mailbox.delete(uids)