安装插件
pip install flask-mail
示例邮件信息:
邮件字段 | 字段值 |
---|---|
发件方(Sender) | Grey(grey@yeah.net) |
收件方(To) | Zoo(Zoo@qq.com) |
邮件主题(Subject) | Hello, World |
邮件正文(Body) | Across the Great Wall |
初始化:
from flask_mail import Mail
app = Flask(__name__)
...
mail = Mail(app)
Flask-Mail的常用配置:
配置键 | 说明 | 默认值 |
---|---|---|
MAIL_SERVER | 用于发送邮件的SMTP服务器 | localhost |
MAIL_PORT | 发送端口 | 25 |
MAIL_USE_TLS | 是否使用STARTTLS | False |
MAIL_USE_SSL | 是否使用SSL/TLS | False |
MAIL_USERNAME | 发送服务器的用户名 | None |
MAIL_PASSWORD | 发信服务器的密码 | None |
MAIL_DEFAULT_SENDER | 默认的发信人 | None |
SSL(安全套接字)和TLS(传输层安全)是两种常用的电子邮件安全协议。
STARTTLS是另一种加密协议,会对不安全的连接进行升级。
SSL/TLS加密:
MAIL_USE_SSL = True
MAIL_PORT = 465
STARTTLS加密:
MAIL_USE_TLS = True
MAIL_PORT = 587
默认发信人由一个两元素元组组成,姓名+ 邮箱地址:
MAIL_DEFAULT_SENDER = ('Your NAme', 'your_name@example.com')
为了方便可以写成
MAIL_DEFAULT_SENDER = ('Your Name', MAIL_USERNAME)
Flask-Mail会自动转换成
MAIL_DEFAULT_SENDER = 'Your Name <your_name@example.com>'
以下代码测试通过:
from flask import Flask, request
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
app.config['MAIL_DEBUG'] = True # 开启debug,便于调试看信息
app.config['MAIL_SUPPRESS_SEND'] = False # 发送邮件,为True则不发送
app.config['MAIL_SERVER'] = 'smtp.sina.com' # 邮箱服务器
app.config['MAIL_PORT'] = 465 # 端口
app.config['MAIL_USE_SSL'] = True # 重要,qq邮箱需要使用SSL
app.config['MAIL_USE_TLS'] = False # 不需要使用TLS
app.config['MAIL_USERNAME'] = '******' # 填邮箱
app.config['MAIL_PASSWORD'] = '******' # 填密码
app.config['MAIL_DEFAULT_SENDER'] = '*****' # 填邮箱,默认发送者
mail = Mail(app)
# 异步发送邮件
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
@app.route('/')
def index():
msg = Message(subject='Hello World',
sender="****@sina.com", # 需要使用默认发送者则不用填
recipients=['*****@qq.com', '****@yeah.com'])
# 邮件内容会以文本和html两种格式呈现,而你能看到哪种格式取决于你的邮件客户端。
msg.body = 'sended by flask-email'
msg.html = '<b>测试Flask发送邮件<b>'
thread = Thread(target=send_async_email, args=[app, msg])
thread.start()
return '<h1>邮件发送成功</h1>'
if __name__ == '__main__':
app.run(host="127.0.0.1", port=5555)