pymail-io

An asynchronous mail server


Install
pip install pymail-io==0.0.4

Documentation

PyPI PyPI - Python Version Read the Docs (version)

PyMailIO

An Asynchronous mail server that's built on CPython's AsyncIO library.

Read the docs: Documentation

pip install pymail-io

# Install & run Redis
docker run redis

Quick Start

Run PyMailIO as a complete emailing solution:

from pymail_io.pymailio_task import Task

p = Task(
    password="wizard",
    receiver_email="joe@blogs.com", # Or a list of emails receiver_email=["joe@blogs.com", ...],
    sender_email="your_email@gmail.com",
    email_host="smtp.gmail.com",
)
# if you are running PyMailIO within the life time of a long running process, such as
# a web framework of rest API, then set `run_forever=True` as this will yield much
# better performances.

Create your email subject & body

r = p.send_email(
    subject="The subject...",
    body="The email body...",
)

The response from calling p.send_email:

"""

{
    "metadata": { # metadata... },
        "email": {
            "subject": subject,
            "body": body,
            "email_init": # time that PyMailIO sent your email,
    }
}
"""

To get the results of the email from the store, pass the metadata to get_email_response. For example:

# r is the return value from calling p.send_email (see above)
r = p.send_email(
    subject="The subject...",
    body="The email body...",
)

email_meta = p.get_email_response(r)

There are 2 datetime values that reference when PyMailIO executed the send_email method & also when the email was actually sent from the background queue: The datetime_exec method will give you the datetime value that PyMailIO executed the send_email method. For example:

r = p.send_email(
    subject="The subject...",
    body="The email body...",
)

self.datetime_exec()

There are 2 datetime values that reference when PyMailIO executed the send_email method & also when the email was actually sent from the background queue: The exec_time method will give you the datetime value that PyMailIO's queue executed the send_email method. For example:

r = p.send_email(
    subject="The subject...",
    body="The email body...",
)

# Some time in the future...
r = get_email_response(r)
time_email_sent = self.exec_time(r)

To update the task queue & store settings, you can pass in extra values as kwargs to the Task class. For example:

p = Task(
   password="wizard",
   receiver_email="joe@blogs.com",  # Or a list of emails receiver_email=["joe@blogs.com", ...],
   sender_email="your_email@gmail.com",
   email_host="smtp.gmail.com",

   # extra settings:
    store_port=6379,
    store_host="localhost",
    db=0,
    workers=1,
)

Built With

  • PyTaskIO - Asynchronous Tasks Library using asyncio

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

This library is based on & influenced by flask-mail.