maildaemon package


In [ ]:
import maildaemon

reading configuration


In [ ]:
cfg = maildaemon.load_config()

In [ ]:
connections = cfg['connections']

connecting, retrieving/sending messages


In [ ]:
from maildaemon.imap_daemon import IMAPDaemon
from maildaemon.smtp_connection import SMTPConnection
from maildaemon.pop_daemon import POPDaemon

1and1


In [ ]:
one_and_one_imap = IMAPDaemon.from_dict(connections['1and1-imap'])

In [ ]:
one_and_one_imap.connect()

In [ ]:
one_and_one_imap.retrieve_folders_with_flags()

In [ ]:
one_and_one_imap.retrieve_messages([1, 2, 3])

In [ ]:
one_and_one_imap.disconnect()

In [ ]:
one_and_one_smtp = SMTPConnection.from_dict(connections['1and1-smtp'])
#one_and_one_pop = POPDaemon.from_dict(connections['1and1-pop'])
one_and_one_smtp.connect()
#one_and_one_pop.connect()

In [ ]:
one_and_one_smtp.disconnect()
#one_and_one_pop.disconnect()

Gmail


In [ ]:
gmail_imap = IMAPDaemon.from_dict(connections['gmail-imap'])
gmail_imap.connect()

In [ ]:
gmail_imap.retrieve_folders_with_flags()

In [ ]:
gmail_imap.open_folder()

In [ ]:
gmail_imap.open_folder('[Gmail]/Sent Mail')

In [ ]:
gmail_imap.open_folder('[Gmail]/All Mail')

In [ ]:
gmail_imap.retrieve_message_ids()

In [ ]:
gmail_imap.retrieve_message_parts(1, ['UID', 'FLAGS'])

In [ ]:
gmail_imap.retrieve_messages_parts(range(1,100), ['ENVELOPE'], '[Gmail]/All Mail')

In [ ]:
gmail_imap.retrieve_messages_parts(range(1,100), ['ENVELOPE'])

In [ ]:
message_parts = gmail_imap.retrieve_message_parts(10, ['ENVELOPE'])
message_parts

In [ ]:
gmail_imap.move_messages([10], '[Gmail]/Important')

In [ ]:
def enable(self):
    self._link.enable('MOVE')

In [ ]:
enable(gmail_imap)

In [ ]:
message = gmail_imap.retrieve_message(1)
message

In [ ]:
gmail_imap.disconnect()

In [ ]:
gmail_smtp = SMTPConnection.from_dict(connections['gmail-smtp'])
gmail_smtp.connect()

In [ ]:
gmail_smtp.disconnect()

iTSCOM


In [ ]:
#itscom_smtp = SMTPConnection.from_dict(connections['itscom-smtp'])
itscom_pop = POPDaemon.from_dict(connections['itscom-pop'])

In [ ]:
itscom_pop.connect()

In [ ]:
itscom_pop.retrieve_message_ids()

In [ ]:
itscom_pop.disconnect()

WIP: special handling of Gmail

from maildaemon.gmail_imap_daemon import GmailIMAPDaemon
class GmailIMAPDaemon(IMAPDaemon): pass
gmail_imap = GmailIMAPDaemon.from_dict(connections['gmail-imap'])
gmail_imap.connect()
gmail_imap.update()
gmail_imap.disconnect()

WIP: running daemon to maintain connections automatically

from maildaemon.daemon import Daemon
d = Daemon() d.add_server(one_and_one_imap) d.add_server(gmail_imap) d.add_server(itscom_pop)
d.run()

WIP: filtering messages

from maildaemon.message_filter import MessageFilter
import typing as t class MessageFilter: def __init__(self, for_server: t.Optional[Server]=None, for_folder: t.Optional[str]=None, **masks): self._for_server = for_server self._for_folder = for_folder self._masks = masks def match(self, message: Message) -> bool: return False

email, email.message and email.parser packages


In [ ]:
import email

In [ ]:
envelope, body = message_parts
email_message = email.message_from_bytes(body) # type: email.message.Message
print(email_message.as_string())
email_message

In [ ]:
email_message.defects

In [ ]:
parser = email.parser.BytesParser()
msg = parser.parsebytes(body, headersonly=False)
print(msg.as_string())
msg.items() == email_message.items()