【flask-Email】邮件发送
发送 邮件 Flask email
2023-09-27 14:25:18 时间
使用依赖:
flask_mail
安装方式:
pip3 install flask-mail
代码示例:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
#通过app.config对象的update()方法来加载配置
app.config.update(
MAIL_SERVER="smtp.xxx.com",
MAIL_USE_SSL=True,
MAIL_PORT=465,
MAIL_USERNAME='wangju@xxx.com',
MAIL_PASSWORD="授权码",
MAIL_DEFAULT_SENDER=('wangju', 'wangju@xxx.com') #默认发件人 发件人邮箱
)
mail = Mail(app)
subject='脚本测试用例维护通知' #邮件主题
recipients='wxx@xxx.com' #收件人
body='测试邮件' #邮件内容
#发送邮件
def send_email(subject,to,body):
message = Message(subject,recipients=[to],body=body)
mail.send(message)
@app.route('/')
def subscribe():
send_email(subject,'收件人邮件',body)
return '发送邮件成功,请查收'
if __name__ == '__main__':
app.run(debug=True)
遇到的问题1:
运行demo.py时报错:
RuntimeError: Working outside of application context
查询了一番,只知道这个错的意思是没有激活上下文,但是不清楚,没有激活上下文又代表什么意思。
最后才发现,原来就是我在demo.py中
加了视图函数subscribe(),并在其中调用 send_email,就可以正常发送邮件了。
参考文档:
Flask抛出RuntimeError: Working outside of application context.错误
遇到的问题2:
在视图函数中调用 send_email()函数,导致响应时间超过20秒
这是因为 程序正在发送电子邮件,发信的操作阻断了请求-响应循环,直到发信的send_mail()函数调用结束后,视图函数才会返回响应。
为了避免这个延迟,可以将发信函数放入后台线程异步执行。
示例代码:
from threading import Thread
#异步发送电子邮件
def _send_async_mail(app,message):
with app.app_context():
mail.send(message)
def send_email(subject,to,body):
message = Message(subject,recipients=[to],body=body)
thr=Thread(target=_send_async_mail,args=[app,message])
thr.start() return thr
因为Flask-Mail的send()方法内部调用逻辑中使用了current_app变量,而这个变量只在激活的程序上下文中才存在,这里在后台线程调用
发信函数,但是后台线程并没有程序上下文存在。为了正常实现发信功能,我们传入程序实例app作为参数,并调用app.app_context()手动激活程序上下文 。
再次调用接口发现,响应时间从原来的20s变为了0.7s
相关文章
- 使用ant进行邮件发送,ant发送已存在的html文件
- python实现发送邮件功能
- python 发送邮件脚本
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
- Word处理控件Aspose.Words功能演示:使用C#在电子邮件正文中发送Word文档
- 【钉钉】发送工作通知限制与注意点
- 基于FPGA的CDMA数字基带发送系统
- 接纳时间同步服务器端口自身发送的报文
- JAVA MAIL 发送邮件(SSL加密方式,TSL加密方式)
- Spring Boot使用JavaMailSender发送邮件
- zabbix使用sendEmail发送邮件报警
- 使用git send-email发送邮件时报错: Unable to initialize SMTP properly怎么处理?
- swift开发网络篇—利用NSURLSession 发送GET和POST请求
- 移动网页如何实现发送短信和拨打电话的功能
- Qt开源作品28-邮件发送工具
- 转 Linux SendMail发送邮件失败诊断案例(四)
- 如何使用 Cdosys.dll 库使用ASP发送邮件带附件
- Golang发送邮件
- STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏
- Android短彩信源码解析-短信发送流程(三)
- C语言检查本机公网IP并发送邮件
- jenkins发送带附件(logfile.log和index.html)的邮件配置
- Shell监控磁盘并发送邮件
- 发送邮件
- postman(十):配置jenkins自动发送邮件(邮件包含测试报告)
- 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)
- NSA:在选举日之前俄罗斯黑客曾向美国选举官员发送钓鱼邮件