Set header from IMAP

Laszlo Nagy gandalf at designaproduct.biz
Mon Nov 13 07:45:50 EST 2006


  Dear List,

I'm trying to figure out, how to change the header of an e-mail that is 
accessed by an IMAP object.
There is some code below (not a complete program). The key function is 
the filter_mail function. It should move/delete/change/export messages, 
based on their header. For exporting messages, I use this: "typ,dat = 
self.conn.uid('FETCH',self.uid,'(RFC822)') ". The only thing I don't 
know how to do, is to insert/modify/delete custom headers in e-mails. I 
was looking for this on Google and the Python cookbook, but I did not 
find anyting useful. Please help.

   Laszlo


import local
import imaplib

class IMAPError(Exception):
    pass

def check_imap_error((typ,data)):
    if (typ != 'OK'):
        raise IMAPError((typ,data))
   
def getnewimapconnection():
    conn = imaplib.IMAP4_SSL(local.IMAP_HOST)
    check_imap_error(conn.LOGIN(local.IMAP_LOGIN,local.IMAP_PWD))
    return conn


conn = getnewimapconnection()
cnt = 0
try:
    for inputfolder in (local.SOURCE_FOLDER,local.SOURCE_FOLDER2):
        typ,data = conn.select(inputfolder)
        check_imap_error((typ,data))
        cnt = int(data[0])

        if cnt > 0:
            self.logger.info("Processing %s messages in %s",cnt,inputfolder)
            # Get UID and RFC822 headers for all messages
            typ, items = conn.fetch('1:%s'%cnt, '(UID RFC822.HEADER)')
            check_imap_error((typ, items))
            for item in items:
                if isinstance(item,tuple):
                    uid = item[0].split()[2]
                    headers = item[1]
                    parser = email.Parser.Parser()
                    parsed = parser.parsestr(headers,True)
                    filter_mail(conn,uid,parsed)
            conn.expunge()
        else:
            self.logger.info("No new messages in %s",inputfolder)
finally:
    conn.logout()






More information about the Python-list mailing list