Effective working with email messages using IMAP protocol.
Project description
Effective working with email messages using IMAP protocol.
Python version |
3.3+ |
License |
MIT |
PyPI |
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)
dependencies: typing
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.date
message.text
message.html
message.flags
message.from_values
message.to_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
# 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 to folder1, *in bulk
mailbox.delete([msg.uid for msg in mailbox.fetch()])
# FLAG unseen messages in current folder as Answered and Flagged, *in bulk
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)
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
Thanks to
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for imap_tools-0.5.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db9afb9d4ee63d013a677b586c2ef7aef702278de7328852622cc6694522491d |
|
MD5 | 3af8664ead7a567b836c4991c0be950b |
|
BLAKE2b-256 | 2a0bb3fc19a78eff4028a50793ad0103a102812fbc424ef94966e14084555a6a |