flask扩展包 --- flask_mail

2020-08-20  本文已影响0人  python_菜鸟

简介

在 Web 应用中的一个最基本的功能就是能够给用户发送邮件。
Flask-Mail 扩展提供了一个简单的接口,可以在 Flask 应用中设置 SMTP 使得可以在视图以及脚本中发送邮件信息。

安装

pip install Flask-Mail

配置

Flask-Mail 使用标准的 Flask 配置 API 进行配置:

初始化

from flask import Flask
from flask_mail import Mail

app = Flask(__name__)
mail = Mail(app)

也可以在开发中利用工厂模式初始化

from flask import Flask
from flask_mail import Mail

mail = Mail()

app = Flask(__name__)
mail.init_app(app)

发送邮件

from flask_mail import Message

@app.route("/")
def index():

    msg = Message("Hello",
                  sender="from@example.com",
                  recipients=["to@example.com"])

也可以设置一个或多人接收:

msg.recipients = ["you@example.com"]
msg.add_recipient("somebodyelse@example.com")

如果你在配置文件里设置MAIL_DEFAULT_SENDER,你就不必在此填写sender,默认使用配置项的sender:

msg = Message("Hello",
              recipients=["to@example.com"])

同时sender也可以设置为二元组,分别为姓名,邮件地址:

msg = Message("Hello",
              sender=("Me", "me@example.com"))

assert msg.sender == "Me <me@example.com>"

邮件的内容包含主题甚至是html文件:

msg.body = "testing"
msg.html = "<b>testing</b>"

所有信息配置就绪最后就是发送邮件:

mail.send(msg)

邮件的信息内也可以添加附件:

with app.open_resource("image.png") as fp:
    msg.attach("image.png", "image/png", fp.read())

下面引用一下李辉大神 项目中的代码:

# -*- coding: utf-8 -*-

from threading import Thread

from flask import current_app, render_template
from flask_mail import Message

from albumy.extensions import mail


def _send_async_mail(app, message):
    with app.app_context():
        mail.send(message)


def send_mail(to, subject, template, **kwargs):
    message = Message(current_app.config['ALBUMY_MAIL_SUBJECT_PREFIX'] + subject, recipients=[to])
    message.body = render_template(template + '.txt', **kwargs)
    message.html = render_template(template + '.html', **kwargs)
    app = current_app._get_current_object()
    thr = Thread(target=_send_async_mail, args=[app, message])
    thr.start()
    return thr


def send_confirm_email(user, token, to=None):
    send_mail(subject='Email Confirm', to=to or user.email, template='emails/confirm', user=user, token=token)


def send_reset_password_email(user, token):
    send_mail(subject='Password Reset', to=user.email, template='emails/reset_password', user=user, token=token)


def send_change_email_email(user, token, to=None):
    send_mail(subject='Change Email Confirm', to=to or user.email, template='emails/change_email', user=user, token=token)


上一篇下一篇

猜你喜欢

热点阅读