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
Run PyMailIO as a complete emailing solution:
from pymail_io.pymailio_task import Task
p = Task(
password="wizard",
receiver_email="[email protected]", # Or a list of emails receiver_email=["[email protected]", ...],
sender_email="[email protected]",
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="[email protected]", # Or a list of emails receiver_email=["[email protected]", ...],
sender_email="[email protected]",
email_host="smtp.gmail.com",
# extra settings:
store_port=6379,
store_host="localhost",
db=0,
workers=1,
)
- PyTaskIO - Asynchronous Tasks Library using asyncio
- Joe Gasewicz - Initial work - JoeGasewicz
This project is licensed under the MIT License - see the LICENSE.md file for details
This library is based on & influenced by flask-mail.