Laszlo Nagy írta: > Laszlo Nagy írta: > >> Hello, >> >> I'm trying to write a very simple program that moves all messages from >> INBOX into another folder. >> I'm not sure what am I doing wrong. This is a very simple task. I >> believe I need to call these methods: >> >> - search -> get all message UIDs in the INBOX >> - copy -> copy all messages to another folder >> - store -> mark all messages in INBOX as deleted >> - expunge -> delete them physically >> >>
Here is the solution - code to move all messages from SOURCE_FOLDER to DEST_FOLDER self.logger.info('Connecting to IMAP server...') conn = getnewimapconnection() cnt = 0 try: typ,data = conn.select(local.SOURCE_FOLDER) check_error((typ,data)) cnt = int(data[0]) if cnt > 0: self.logger.info("Moving %s messages from %s to %s",cnt,local.SOURCE_FOLDER,local.DEST_FOLDER) # Get uids for all messages typ,all_messages = conn.uid('SEARCH',None,'ALL') check_error((typ,data)) uids = all_messages[0].split() # Store all messages into another folder for uid in uids: check_error(conn.uid('COPY',uid,local.DEST_FOLDER)) # Delete all messages from inbox for uid in uids: check_error(conn.uid('STORE',uid,'+FLAGS.SILENT','(\\Deleted)')) conn.expunge() else: self.logger.info("No new messages in %s",local.SOURCE_FOLDER) finally: conn.logout() Here is the connection factory: class IMAPError(Exception): pass def check_error((typ,data)): if (typ != 'OK'): raise IMAPError((typ,data)) def getnewimapconnection(): conn = imaplib.IMAP4_SSL(local.IMAP_HOST) check_error(conn.LOGIN(local.IMAP_LOGIN,local.IMAP_PWD)) return conn I should still check if the operations can be done in bulk (e.g. for many uids at the same time). Is this possible? I don't know. Best, Laszlo -- http://mail.python.org/mailman/listinfo/python-list