Skip to main content

用于发送电子邮件的 Flask 扩展

项目描述

Flask-EZMail

Flask-EZMail 是 Fl​​ask 更简单的电子邮件。

Flask-EZMail 是 Fl​​ask-Mail 的一个分支。它保持与 Flask-Mail 的高度兼容性,因此只需很少的代码重构即可从一个切换到另一个。

Flask-Mail 是一个方便的 smtlib 包装器,但它要求在创建应用程序时加载 SMTP 设置。如果您的用户通过 Web 界面输入 SMTP 设置,则它不是最佳的,需要解决方法。

Flask-EZMail 设计灵活。您可以像使用 Flask-Mail 一样在应用程序创建时加载 SMTP 设置,或者如果您的用户通过 Web 管理面板设置它们,您可以在以后的任何时间加载它们。看看下面的例子!

安装

pip install flask-ezmail

创建电子邮件对象

假设您想在创建应用程序时加载 SMTP 设置并且永远不要更改它们,就像 Flask-Mail 期望的那样:

# 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
)

在该示例中,您将有一个名为的全局变量mail,您可以使用from app import mail. 那里没有什么特别的,因为它类似于 Flask-Mail。

但这就是灵活性的所在!假设您的用户在创建应用程序后稍后在管理面板中填写了一个设置 SMTP 设置的表单。我们假设您已将其定义为EmailSetupForm您的app.models. 然后,您可以通过这种方式设置邮件:

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
)

您现在已经动态创建了一个邮件对象!您可能希望将其存储起来以供以后在应用程序的其他地方使用。关于如何做到这一点,您有很多选择:

  1. 你可以腌制它并将其保存到redis:
import pickle

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

或者,如果您使用的是 Flask-SQLAlchemy,您可以创建一个继承自 的电子邮件模型Mail,并以这种方式保存:

# 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)

如果你走 SQLAlchemy 路线,任何时候你需要获取你的电子邮件客户端,你只需:

mail = Email.query.first()

如果您需要即时更改 SMTP 设置:

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()

发送消息使用与 Flask-Mail 相同的 Message 对象(在 Flask-EZMail 中克隆)。

from flask_ezmail import Message

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

Flask-EZmail 同样使用与connect()Flask-Mail 相同的方法。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

flask-ezmail-0.6.3.tar.gz (8.6 kB 查看哈希)

已上传 source

内置分布

flask_ezmail-0.6.3-py3-none-any.whl (15.3 kB 查看哈希

已上传 py3