pymail-io
pymail-io copied to clipboard
An Asynchronous mail server - fire & forget!

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="[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,
)
Built With
- PyTaskIO - Asynchronous Tasks Library using asyncio
Authors
- Joe Gasewicz - Initial work - JoeGasewicz
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.