Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Move an email in GMail with Python and imaplib

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.

like image 344
Dan Avatar asked Aug 20 '10 03:08

Dan


People also ask

What is Imaplib in Python?

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.


1 Answers

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) 
like image 57
Manoj Govindan Avatar answered Sep 18 '22 16:09

Manoj Govindan