Flask-Mail包装了Python标准库中的smtplib包,简化了在Flask程序中发送电子邮件的过程。
Flask-Mail通过连接SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器来发送邮件。在开始发送电子邮件前,我们需要配置SMTP服务器。在开发和测试阶段,我们可以使用邮件服务提供商的SMTP服务器(比如QQ),这时我们需要对Flask-Mail进行配置。
配置邮箱服务器
QQ授权码在QQ邮箱设置中进行配置。
配置项如下:
MAIL_SERVER = 'smtp.qq.com',
MAIL_PROT = 587,
MAIL_USE_TLS = True,
MAIL_USE_SSL = False,
MAIL_USERNAME = "",
MAIL_PASSWORD = "",
MAIL_DEBUG = True
代码
# -*- coding: utf-8 -*-
import os
import sys
from flask import Flask
from flask_mail import Mail
from flask_mail import Message
app = Flask(__name__)
app.config.update(dict(
DEBUG=True,
MAIL_SERVER="smtp.qq.com",
MAIL_PORT=587,
MAIL_USE_TLS=True,
MAIL_USERNAME="xx@qq.com",
MAIL_PASSWORD="xx", # QQ 授权码
MAIL_DEFAULT_SENDER=('xx', "xx"),
))
mail = Mail(app)
# 去除空格
# app.jinja_env.trim_blocks = True
# app.jinja_env.lstrip_blocks = True
@app.route('/send_mail')
def send_mail():
subject = 'flask_mail 测试'
recipients = ['Tom <xx@163.com>']
body = '这是一封测试邮件'
message = Message(
subject=subject, sender=app.config['MAIL_USERNAME'], recipients=recipients)
message.body = body
# 加载附件
with app.open_resource('./xx.pdf') as fp:
# attach("文件名", "类型", 读取文件)
message.attach("简历.pdf", 'application/octet-stream', fp.read())
try:
mail.send(message)
return '发送成功'
except expression as e:
print(e)
return '发送失败'
if __name__ == "__main__":
app.debug = True
app.run()