I want to be able to move an email in GMail from the inbox to another folder using Python. I am using imaplib and can't figure out how to do it.
Python's client side library called imaplib is used for accessing emails over imap protocol. IMAP stands for Internet Mail Access Protocol. It was first proposed in 1986. Key Points: IMAP allows the client program to manipulate the e-mail message on the server without downloading them on the local computer.
There is no explicit move command for IMAP. You will have to execute a COPY
followed by a STORE
(with suitable flag to indicate deletion) and finally expunge
. The example given below worked for moving messages from one label to the other. You'll probably want to add more error checking though.
import imaplib, getpass, re pattern_uid = re.compile(r'\d+ \(UID (?P<uid>\d+)\)') def connect(email): imap = imaplib.IMAP4_SSL("imap.gmail.com") password = getpass.getpass("Enter your password: ") imap.login(email, password) return imap def disconnect(imap): imap.logout() def parse_uid(data): match = pattern_uid.match(data) return match.group('uid') if __name__ == '__main__': imap = connect('<your mail id>') imap.select(mailbox = '<source folder>', readonly = False) resp, items = imap.search(None, 'All') email_ids = items[0].split() latest_email_id = email_ids[-1] # Assuming that you are moving the latest email. resp, data = imap.fetch(latest_email_id, "(UID)") msg_uid = parse_uid(data[0]) result = imap.uid('COPY', msg_uid, '<destination folder>') if result[0] == 'OK': mov, data = imap.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)') imap.expunge() disconnect(imap)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With