首页 / 邮件 / Flask入门邮件同步与异步发送(九)
Flask入门邮件同步与异步发送(九)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Flask入门邮件同步与异步发送(九),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3538字,纯文字阅读大概需要6分钟。
内容图文
![Flask入门邮件同步与异步发送(九)](/upload/InfoBanner/zyjiaocheng/1130/34fd34c4c3b74995924c6451291427c6.jpg)
? 应用场景: 用户在注册或者密码丢失等过程中,账号绑定邮箱,用户在进行身份认证的过程中,电子邮箱确实是一种很常用的方式,Python中提供了smtplib可以实现发送电子邮件功能,Flask框架也有对应的flask-email库,扩展对电子发送的支持
安装
pip3 install flask-mail
导入及初始化
from flask_mail import Mail
mail=Mail(app)
Flask-mail可以连接SMTP服务器,并把邮件利用这个服务器发送出去. Flask-mail服务器相关配置参数:
参数 | 默认值 | 说明 |
---|---|---|
MAIL_SERVER | loaclhost | SMTP服务器主机或者IP地址 |
MAIL_PORT | 25 | 电子邮件服务器端口 |
MAIL_USE_TLS | False | 是否启用传输层安全协议(TLS) |
MAIL_USE_SSL | False | 是否启用安全套接层协议(SSL) |
MAIL_USERNAME | None | 电子邮箱账号用户名 |
MAIL_PASSWORD | None | 电子邮箱账号密码 |
MAIL_DEBUG | False | 是否启动调试 |
一般在配置文件config配置如下
#方式1在config文件中配置
MAIL_SERVER=‘smtp.163.com‘
MAIL_PORT=25
MAIL_USE_TLS=True
MAIL_USERNAME=‘***@163.com‘
MAIL_PASSWORD=‘******‘
MAIL_DEBUG=True#方式2 在app中配置
app.config["MAIL_SERVER"] ="smtp.163.com"
app.config["MAIL_PORT"] =25
app.config["MAIL_USE_SSL"] =True
app.config["MAIL_USERNAME"] ="xxxxx@163.com"
app.config["MAIL_PASSWORD"] ="123456"#方式3 在app中直接配置config
app.config[‘MAIL_SERVER‘] = os.environ.get(‘MAIL_SERVER‘,‘smtp.1000phone.com‘)
app.config[‘MAIL_USERNAME‘] = os.environ.get(‘MAIL_USERNAME‘,‘xialigang@1000phone.com‘)
app.config[‘MAIL_PASSWORD‘] = os.environ.get(‘MAIL_PASSWORD‘,‘123456‘)
# os.environ.get(‘环境变量名‘,‘环境变量值‘),将获取的环境变量绑定到config文件
同步邮件发送
from flask import Flask, render_template_string
from flask_mail import Mail, Message
import os
app = Flask(__name__)
app.config[‘MAIL_SERVER‘] = os.environ.get(‘MAIL_SERVER‘, ‘smtp.163.com‘)
app.config[‘MAIL_USERNAME‘] = os.environ.get(‘MAIL_USERNAME‘, ‘发件人@163.com‘)
app.config[‘MAIL_PASSWORD‘] = os.environ.get(‘MAIL_PASSWORD‘, ‘mm22kk11‘)
# 绑定实例化mail对象
mail = Mail(app)
@app.route(‘/‘)
def index():
msg = Message(subject=‘邮件激活‘, recipients=[‘收件人@qq.com‘], sender=app.config[‘MAIL_USERNAME‘])
msg.html = render_template_string(‘<h1>大郎,我是金莲啊<h1>‘)
mail.send(message=msg)
return‘发送邮件‘if__name__==‘__main__‘:
app.run(debug=True)
# sender 发送人邮箱 recipients接收人邮箱# smtp为发送邮件服务器
注意:
1 subject为邮件标题。
2 sender为发送方
3 recipients为接收方,可以设置一个或者多个收件人,也可以后续再添加
4 邮件内容可以包含主体body以及/或者 HTML:
msg.recipients = ["xxx@qq.com"]
msg.add_recipient("xxxx@qq.com")
msg.body ="testing"
msg.html ="<b>testing</b>"5 实例化Message 传参如下
msg = Message(subject="Hello World!",
sender="from@qq.com",
recipients=["to@example.com"])
但是这样明显发现有个问题,因为是同步单线程的邮件发送,一旦用户多进入消息队列,这样响应时间会较长影响用户体验,因此我们改进下采用异步多线程的形式发送.
异步多线程发送邮件
from flask import Flask,render_template_string,render_template
from flask_mail import Mail,Message
import os
from threading import Thread
app = Flask(__name__)
app.config[‘MAIL_SERVER‘] = os.environ.get(‘MAIL_SERVER‘,‘smtp.163.com‘)
app.config[‘MAIL_USERNAME‘] = os.environ.get(‘MAIL_USERNAME‘,‘发件人@163.com‘)
app.config[‘MAIL_PASSWORD‘] = os.environ.get(‘MAIL_PASSWORD‘,‘mm22kk11‘)
mail = Mail(app)
#开启异步处理def async_send_mail(app,msg):
#获取当前程序的上下文with app.app_context():
#邮件发送
mail.send(message=msg)
def send_mail(subject,to,tem,**kwargs):
#实例化的message对象(subject,recipients,sender)
msg = Message(subject=subject, recipients=[to], sender=app.config[‘MAIL_USERNAME‘])
#重定向到mail.html
msg.html = render_template(tem+‘.html‘,**kwargs)
#thread代表发送邮件的线程信息
thread = Thread(target=async_send_mail,args=(app,msg))
thread.start()
@app.route(‘/‘)
def index():
send_mail(‘邮件激活‘,‘收件人@qq.com‘,‘mail‘,username=‘zhangsan‘)
return‘发送邮件‘if__name__==‘__main__‘:
app.run(debug=True)
#mail.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>邮件信息</title></head><body>
{{ username }},金莲我来了!!</body></html>
以上就是开启的多线程异步发送邮件,可以处理大量的邮件请求,减少用户的等待时间.
原文:https://www.cnblogs.com/why957/p/9135745.html
内容总结
以上是互联网集市为您收集整理的Flask入门邮件同步与异步发送(九)全部内容,希望文章能够帮你解决Flask入门邮件同步与异步发送(九)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。