Skip to main content

Effective working with email messages using IMAP protocol.

Project description

Effective working with email using IMAP protocol.

Python version 3.3+
License MIT
PyPI https://pypi.python.org/pypi/imap_tools/
IMAP VERSION 4rev1 - https://tools.ietf.org/html/rfc3501

Features

  • transparent work with letter attributes
  • work with letters in directories (copy, delete, flag, move, seen)
  • work with directories (list, set, get, create, exists, rename, delete, status)
  • no dependencies

Installation

$ pip install imap_tools

Quick guide

Init:

from imap_tools import MailBox
mailbox = MailBox('imap.mail.com')
mailbox.login('test@mail.com', 'password')

Message attributes:

# NOTE: All message properties are cached by functools.lru_cache

for message in mailbox.fetch():
    message.id
    message.uid
    message.subject
    message.from_
    message.to
    message.cc
    message.bcc
    message.date
    message.text
    message.html
    message.flags
    message.from_values
    message.to_values
    message.cc_values
    message.bcc_values
    for filename, payload in message.attachments:
        filename, payload
    # any message attribute: message.obj['Message-ID'], message.obj['X-Google-Smtp-Source'] ...

Actions with messages in folder:

# NOTE: You can use 2 approaches to perform these operations
# "by one" - Perform operation for each message separately per N commands
# "in bulk" - Perform operation for message set per 1 command

# init
mailbox.login('test@mail.com', 'pwd', initial_folder='INBOX')

# COPY all messages from current dir to folder1, *by one
for msg in mailbox.fetch():
    res = mailbox.copy(msg.uid, 'INBOX/folder1')

# DELETE all messages from current dir, *in bulk
mailbox.delete([msg.uid for msg in mailbox.fetch()])

# FLAG unseen messages in current folder as Answered and Flagged, *in bulk. (see imap_tools.StandardMessageFlags)
mailbox.flag(mailbox.fetch('(UNSEEN)'), ['Answered', 'Flagged'], True)

# MOVE all messages from current dir to folder2, *in bulk
mailbox.move(mailbox.fetch(), 'INBOX/folder2')

# mark SEEN all messages sent at 05.03.2007 in current folder as unseen, *in bulk
mailbox.seen(mailbox.fetch("SENTON 05-Mar-2007"), False)

Actions with folders:

# LIST
for folder in mailbox.folder.list('INBOX'):
    print(folder['flags'], folder['delim'], folder['name'])
# SET
mailbox.folder.set('INBOX')
# GET
current_folder = mailbox.folder.get()
# CREATE
mailbox.folder.create('folder1')
# EXISTS
is_exists = mailbox.folder.exists('folder1')
# RENAME
mailbox.folder.rename('folder1', 'folder2')
# DELETE
mailbox.folder.delete('folder2')
# STATUS
for status_key, status_val in mailbox.folder.status('some_folder').items():
    print(status_key, status_val)

Fetch params

MailBox.fetch - Mail message generator

  • search_criteria: message search criteria, examples
  • limit: limit on the number of read emails, useful for actions with a large number of messages, like “move”
  • miss_defect: miss emails with defects
  • miss_no_uid: miss emails without uid
  • mark_seen: mark emails as seen on fetch

Reasons

There are many different libraries for working with e-mail via the imap protocol. Including imaplib library. However, these libraries contain various shortcomings, such as:

  • excessive low level
  • returned results are not ready to work with them
  • no convenient tools for working with: directories, letters in directories

Release notes

release_notes.rst

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for imap-tools, version 0.7.2
Filename, size & hash File type Python version Upload date
imap_tools-0.7.2-py3-none-any.whl (22.2 kB) View hashes Wheel py3
imap_tools-0.7.2.tar.gz (12.9 kB) View hashes Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page