Skip to content
This repository

Convenience classes and methods for processing IMAP mailboxes

branch: master
README.rst

imapIO

Here are some convenience classes and methods for processing IMAP mailboxes. Since the classes are derived from the imaplib classes, all methods available in the imaplib classes are directly usable.

Installation

easy_install -U imapIO

Usage

# Connect to IMAP server
import imapIO
server = imapIO.connect(host, port, user, password)

# Select folder
import random
emailCount = server.cd(random.choice(server.folders))

# Walk emails in inbox sorted by arrival time
for email in server.walk('inbox', sortCriterion='ARRIVAL'):
    # Show information
    print
    print 'Date: %s' % email.whenUTC
    print 'Subject: %s' % email.subject.encode('utf-8')
    print 'From: %s' % email.fromWhom.encode('utf-8')
    print 'From (nickname): %s' % imapIO.clean_nickname(email.fromWhom)
    print 'To: %s' % email.toWhom.encode('utf-8')
    print 'CC: %s' % email.ccWhom.encode('utf-8')
    print 'BCC: %s' % email.bccWhom.encode('utf-8')
    # Set flags
    email.seen = False
    email.deleted = False

# Walk emails satisfying search criterion
emailCriterion = 'BEFORE 23-JAN-2005'
emailGenerator = server.walk(lambda folder: folder not in ['public', 'trash'], searchCriterion=emailCriterion)
for emailIndex, email in enumerate(emailGenerator):
    # Show flags
    print
    print email.flags
    # Save email in compressed format on hard drive
    emailPath = '%s.gz' % emailIndex
    partPacks = email.save(emailPath)
    # Extract attachments from email on hard drive
    for partIndex, filename, contentType, payload in imapIO.extract(emailPath):
        print len(payload), filename.encode('utf-8')

# Create an email in the inbox
import datetime
server.revive('inbox', imapIO.build_message(
    whenUTC=datetime.datetime(2005, 1, 23, 1, 0),
    subject='Subject',
    fromWhom='from@example.com',
    toWhom='to@example.com',
    ccWhom='cc@example.com',
    bccWhom='bcc@example.com',
    bodyText=u'text',
    bodyHTML=u'<html>text</html>',
    attachmentPaths=[
        'CHANGES.rst',
        'README.rst',
    ]))
# Load email
email = server.walk('inbox', searchCriterion='FROM from@example.com TO to@example.com').next()
# Browse attachments in email
partPacks = email.extract(
    include=lambda index, name, type: name.lower().endswith('.rst'),
    peek=True)
for partIndex, filename, contentType in partPacks:
    print filename
# Delete email
email.deleted = True
server.expunge()

# Duplicate an email from one server to another
server1 = imapIO.connect(host1, port1, user1, password1)
server2 = imapIO.connect(host2, port2, user2, password2)
server2.revive('inbox', server1.walk().next())
Something went wrong with that request. Please try again.