Skip to main content

Flask extension for sending email

Project description

Flask-EZMail

Flask-EZMail is easier email for Flask.

Flask-EZMail is a fork of Flask-Mail. it maintains high compatibility with Flask-Mail, such that very little code refactoring is needed to switch from one to the other.

Flask-Mail is a convenient wrapper for smtlib, but it requrires that SMTP settings be loaded on app creation. If your user is entering SMTP settings via a web interface, it's not optimal and requires workarounds.

Flask-EZMail is designed to be flexible. You can load SMTP settings at app creation like you would with Flask-Mail, or you can load them at any later time if your user is setting them through an web admin panel. Check out the examples below!

Installation

pip install flask-ezmail

Creating an Email Object

Let's say you want to load SMTP settings at app creation and never change them, just like Flask-Mail would expect:

# app/__init__.py
...
from flask_ezmail import Mail
...

<other app creation stuff goes here>

mail = Mail(
  server=app.config['MAIL_SERVER'],
  username=app.config['MAIL_USERNAME'],
  password=app.config['MAIL_PASSWORD'],
  port=app.config['MAIL_PORT'],
  use_tls=True,
  default_sender=app.config['DEFAULT_SENDER'],
  debug=app.debug
)

In that example, you'd have a global variable called mail that you'd be able to import in your other modules using from app import mail. There's nothing special there, as that's similar to Flask-Mail.

But here is where the flexibility comes in! Let's instead say your user fills out a form in the admin panel that sets SMTP settings later, after app creation. We'll assume you've defined that as EmailSetupForm in your app.models. You could then set up mail this way instead:

from app.models import EmailSetupForm
from flask_ezmail import Mail

form = EmailSetupForm()

mail = Mail(
  server=form.server.data,
  username=form.username.data,
  password=form.password.data,
  port=form.port.data,
  use_tls=True,
  default_sender=form.default_sender.data,
  debug=False
)

You now have a mail object created on the fly! You'll probably want to stash it for later use elsewhere in your app. You have lots of options regarding how to do that:

  1. You could pickle it and save it to redis:
import pickle

# this assumes you've set up redis in app/__init__.py
current_app.redis.set('mail', pickle.dumps(mail))

Alternatively if you're using Flask-SQLAlchemy, you could create an email model that inherits from Mail, and save it that way instead:

# app/models.py

from flask_ezmail import Mail

class Email(Mail, db.Model):
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    server = db.Column(db.String(128))
    port = db.Column(db.Integer)
    username = db.Column(db.String(128))
    password = db.Column(db.String(128))
    default_sender = db.Column(db.String(128))
    outgoing_email = db.Column(db.String(128))
    use_tls = db.Column(db.Boolean)
    use_ssl = db.Column(db.Boolean)
    debug = db.Column(db.Boolean, default=False)
    max_emails = db.Column(db.Integer)
    suppress = db.Column(db.Boolean)

If you went the SQLAlchemy route, any time you need to grab your email client you'd just:

mail = Email.query.first()

And if you needed to change an SMTP setting on the fly:

from app import db
from app.models import Email

mail = Email.query.first()
if mail is not None:
    mail.server = 'example.net'
    db.session.commit()

Sending a message uses the same Message object as Flask-Mail (cloned in Flask-EZMail).

from flask_ezmail import Message

msg = Message(
    'Test Message',
    sender='sender@sender.com',
    recipients=['recipient@recipient.com'],
)
mail.send(msg)

Flask-EZmail likewise uses the same connect() method as Flask-Mail.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask-ezmail-0.6.3.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

flask_ezmail-0.6.3-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file flask-ezmail-0.6.3.tar.gz.

File metadata

  • Download URL: flask-ezmail-0.6.3.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.2

File hashes

Hashes for flask-ezmail-0.6.3.tar.gz
Algorithm Hash digest
SHA256 ef416a048672b29c20a40a926b50b5ad9b4097744078da626607c5a0e2066caa
MD5 4627d427bd518df7a8ac05b0e55741e7
BLAKE2b-256 a595ab12d43632299c287a75c0693666e40487c417c7412455ac4d3449806e18

See more details on using hashes here.

File details

Details for the file flask_ezmail-0.6.3-py3-none-any.whl.

File metadata

  • Download URL: flask_ezmail-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.2

File hashes

Hashes for flask_ezmail-0.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c8337a199c5bc7f6fa55eac291c087089ae4f71170d218a8295b5fec686566b5
MD5 f302edaa5e6fdc2907772869b3e79e88
BLAKE2b-256 1fce4c8fa084fc51f0fddbfd2686fd9c83a2a9312b4bc451cca67cbc5121a9b4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page