Flask-Mail
2018-10-16 本文已影响27人
SingleDiego
参考:https://blog.csdn.net/wbin233/article/details/73222027
安装 Flask-Mail
pip install Flask-Mail
配置 Flask-Mail
配置项 | 默认值 | 功能 |
---|---|---|
MAIL_SERVER | localhost | 邮箱服务器 |
MAIL_PORT | 25 | 端口 |
MAIL_USE_TLS | False | 是否使用TLS |
MAIL_USE_SSL | False | 是否使用SSL |
MAIL_DEBUG | app.debug | 是否为DEBUG模式,打印调试消息 |
MAIL_SUPPRESS_SEND | app.testing | 设置是否真的发送邮件,True不发送 |
MAIL_USERNAME | None | 用户名,填邮箱 |
MAIL_PASSWORD | None | 密码,填授权码 |
MAIL_DEFAULT_SENDER | None | 默认发送者,填邮箱 |
MAIL_MAX_EMAILS | None | 一次连接中的发送邮件的上限 |
MAIL_ASCII_ATTACHMENTS | False | 如果 MAIL_ASCII_ATTACHMENTS 设置成 True 的话,文件名将会转换成 ASCII 的。一般用于添加附件。 |
邮件操作
邮件是通过一个 Mail 实例进行管理。
from flask import Flask
from flask_mail import Mail
app = Flask(__name__)
# ...
app.config['MAIL_SERVER'] = 'smtp.qq.com' # 以QQ邮箱为例
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USERNAME'] = 'XXX@qq.com'
app.config['MAIL_PASSWORD'] = '填授权码'
# ...
mail = Mail(app)
在这个例子中所有的邮件将会使用传入到 Mail 实例中的配置项进行发送。
创建发送邮件的内容
from flask_mail import Message
msg = Message(
subject="Hello World!", # 邮件标题
body="test!", # 正文内容
sender="xxx@qq.com", # 发送者
recipients=["xxx@126.com"] # 收件人
)
sender
为发送方,如果你设置了 MAIL_DEFAULT_SENDER
,就不必再次填写发件人,默认情况下将会使用配置项的发件人。
recipients
为接收方,可以设置一个或者多个收件人,也可以后续再添加,例如:
msg.recipients = ["xxx@qq.com"]
msg.add_recipient("xxxx@qq.com") # 新增收件人
sender
也可以是一个二元组,它将会被分成姓名和邮件地址:
sender=("Me", "me@example.com")
邮件内容可以包含主体以及/或者 HTML:
msg.body = "testing"
msg.html = "<b>testing</b>"
最后,发送邮件的时候请使用 Flask 应用设置的 Mail 实例:
mail.send(msg)
这里是一个完整例子:
from flask import Flask
from flask_mail import Mail
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USERNAME'] = 'xxxxxx@qq.com'
app.config['MAIL_PASSWORD'] = '**********' # 授权码
mail = Mail(app)
from flask_mail import Message
msg = Message(
subject="Hello World!",
body="test!",
sender="xxxxx@qq.com",
recipients=["xxxxxx@126.com"]
)
@app.route('/')
def hello_world():
mail.send(msg)
return 'Hello World!'
if __name__ == '__main__':
app.run()
当我们打开 http://127.0.0.1:5000/ 时候,邮件就会发送。