Can you delete emails with imaplib? If so how?
Deleting an email over IMAP is performed in two phases:
- mark one or more items for deletion:
imap.store(msg_no, '+FLAGS', '\\Deleted')
- expunge the mailbox:
imap.expunge()
(imap
is your IMAP4
object)
Use the store method (of the IMAP4
object representing your connection) to set the r'\Deleted'
flag on the message number you want to delete, as the example in the docs show; then the expunge method to actually perform all deletions so marked.
Gmail's implementation of IMAP has subtly different semantics, by default, but if you want you can tweak it to behave much more like a traditional IMAP implementation (where the above sequence works) -- basically you have to enable the "Advanced IMAP Controls" lab, then follow the instructions at the URL I gave to get exactly the IMAP semantics you desire (physically deleting rather than archiving "deleted" mails, waiting or not for expunge
, and so forth).
imap.uid('STORE', list_of_msgno , '+FLAGS', '(\Deleted)')
imap.expunge()
i.e imap.uid('STORE', '2 ,4 , 9 ,12' , '+FLAGS', '(\Deleted)')
Here (2 ,4 ,9 ,12 ) are uid of the messages which r going to be deleted.