flask-emails¶
The flask-emails extension is a simple way to send email messages from Flask application. It is a wrapper for python-emails.
Features¶
- Email message abstraction with html and text part, with inline attachments, etc.
- Email body template rendering
- Email HTML body transform methods: css inlining, image inlining, etc.
- SMTP backends
- DKIM signature
- Configured via Flask application config
Note
There are another flask extension Flask-Mail which solves almost same problems. I guess flask-emails solves little more problems :)
Quickstart¶
Add email-specific options to your flask application, for example:
from flask import Flask
app = Flask(__name__)
app.config = {'EMAIL_HOST': 'localhost', 'EMAIL_PORT': 25, 'EMAIL_TIMEOUT': 10}
Create and send email:
from flask_emails import Message
message = Message(html='<html><p>Hi! ...',
subject="Party today",
mail_from=("John Brown", "john@gmail.com"))
message.attach(data=open('Event.ics', 'rb'), filename='Event.ics')
r = message.send(mail_to=("Nick Jackson", "nick@gmail.com"))
if r.status_code not in [250, ]:
# message is not sent, deal with this
...
See more examples on python-emails docs
Configuration¶
By default flask-emails reads configuration from current Flask application config
when you first time create Message()
object.
It reads the following variables:
EMAIL_HOST |
The host to use for sending email. Default: |
EMAIL_PORT |
Port to use for the SMTP server defined in Default: |
EMAIL_HOST_USER |
Username to use for the SMTP server defined in Default: empty |
EMAIL_HOST_PASSWORD |
Password to use for the SMTP server defined in Default: empty |
EMAIL_USE_TLS |
Whether to use a TLS (secure) connection when talking to the SMTP server.
This is used for explicit TLS connections, generally on port 587.
If you are experiencing hanging connections, see the implicit TLS setting Default: |
EMAIL_USE_SSL |
Whether to use an implicit TLS (secure) connection when talking to the SMTP server.
In most email documentation this type of TLS connection is referred to as SSL.
It is generally used on port 465.
If you are experiencing problems, see the explicit TLS setting Note that Default: |
EMAIL_SSL_CERTFILE |
If Default: |
EMAIL_SSL_KEYFILE |
If Note that setting Please refer to the documentation of Python’s Default: |
EMAIL_TIMEOUT |
Specifies a timeout in seconds for blocking operations like the connection attempt. Default: |
EMAIL_SMTP_DEBUG |
Be verbose on smtp commands. The same as Default: |
EMAIL_BACKEND |
The backend class to use for sending emails.
Available backends are default Default: |
Custom initialization¶
flask-emails reads configuration from current flask application on Message()
object create.
This means that by default you have per-application configuration.
If you need more complex configuration strategy, create EmailsConfig()
object and pass it as config parameter to Message.__init__
.
Example:
from flask_emails import Message, EmailsConfig
another_config = EmailsConfig(config={'EMAIL_HOST':'server2', ...})
Message(config=another_config, html='...').send()
Notes on testing environment¶
Use custom email backend for testing environment.
As a starting point, set EMAIL_BACKEND configuration option to 'flask_emails.backend.DummyBackend'
.
API¶
Note
flask-emails is a wrapper for python-emails library. See python-emails project for more information on API.
Links¶
- source code: github.com/lavr/flask-emails
- python-emails: github.com/lavr/python-emails