The flask-emails extension is a simple way to send email messages from Flask application. It is a wrapper for python-emails.
Note
There are another flask extension Flask-Mail which solves almost same problems. I guess flask-emails solves little more problems :)
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.ext.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
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: 'localhost' |
| EMAIL_PORT | Port to use for the SMTP server defined in EMAIL_HOST. Default: 25 |
| EMAIL_HOST_USER | Username to use for the SMTP server defined in EMAIL_HOST. If empty, emails won’t attempt authentication. Default: empty |
| EMAIL_HOST_PASSWORD | Password to use for the SMTP server defined in EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when authenticating to the SMTP server. 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 EMAIL_USE_SSL. Default: False |
| 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 EMAIL_USE_TLS. Note that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of those settings to True. Default: False |
| EMAIL_SSL_CERTFILE | If EMAIL_USE_SSL is True, you can optionally specify the path to a PEM-formatted certificate chain file to use for the SSL connection. Default: None |
| EMAIL_SSL_KEYFILE | If EMAIL_USE_SSL is True, you can optionally specify the path to a PEM-formatted private key file to use for the SSL connection. Note that setting EMAIL_SSL_CERTFILE and EMAIL_SSL_KEYFILE doesn’t result in any certificate checking. They’re passed to the underlying SSL connection. Please refer to the documentation of Python’s ssl.wrap_socket() function for details on how the certificate chain file and private key file are handled. Default: None |
| EMAIL_TIMEOUT | Specifies a timeout in seconds for blocking operations like the connection attempt. Default: 30 |
| EMAIL_SMTP_DEBUG | Be verbose on smtp commands. The same as debug parameter in smtplib.SMTP Default: 0 |
| EMAIL_BACKEND | The backend class to use for sending emails. Available backends are default emails.backend.stmp.SMTPBackend and flask_emails.backend.DummyBackend (which do not send anything, useful for testing environments). Default: emails.backend.SMTPBackend |
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.ext.emails import Message, EmailsConfig
another_config = EmailsConfig(config={'EMAIL_HOST':'server2', ...})
Message(config=another_config, html='...').send()
Use custom email backend for testing environment.
As a starting point, set EMAIL_BACKEND configuration option to 'flask_emails.backend.DummyBackend'.
Note
flask-emails is a wrapper for python-emails library. See python-emails project for more information on API.
- source code: github.com/lavr/flask-emails
- python-emails: github.com/lavr/python-emails