• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共46篇

    python3.X - Web - Flask1.1.1

关闭

返回栏目

关闭

返回python3.X - Web - Flask1.1.1栏目

39 - Flask - 扩展 - flask-mail - 发邮件

作者:

贺及楼

成为作者

更新日期:2024-10-28 17:30:57

Flask - 扩展 - flask-mail - 发邮件

作用:可以发邮件

flask-mail库的简介

Python 的 Flask-Mail 是一个非常实用的 Flask 扩展库,它提供了一个简单易用的接口来发送电子邮件。以下是 Flask-Mail 的一些主要作用和特点:

  1. 发送电子邮件Flask-Mail 可以发送纯文本邮件和HTML邮件,支持添加附件和嵌入图片。
  2. 连接邮件服务器:它使用 SMTP 协议与邮件服务器进行连接,支持 SSL 和 TLS 加密。
  3. 配置灵活:可以通过 Flask 的配置系统轻松配置邮件服务器的地址、端口、用户名、密码等信息。
  4. 支持默认发件人:可以设置默认的发件人地址,简化邮件发送过程。
  5. 错误处理:在发送邮件时,可以配置错误处理邮箱,以便在发送过程中出现错误时能够收到通知。
  6. 异步发送:为了避免在发送邮件时阻塞主线程,Flask-Mail 支持异步发送邮件,提高了应用程序的响应性能。
  7. 邮件内容定制:可以自定义邮件的主题、正文、HTML 内容、附件等,满足不同的邮件发送需求。
  8. 邮件头处理Flask-Mail 会自动处理邮件头,防止 header injection 攻击。
  9. 信号支持Flask-Mail 支持信号量,可以在邮件发送时触发自定义的信号处理函数。

使用 Flask-Mail,开发者可以在 Flask 应用程序中轻松地添加邮件发送功能,无论是用户注册确认、密码重置通知,还是日常的系统通知,都可以通过 Flask-Mail 来实现。通过简单的配置和几行代码,就可以发送邮件,极大地提高了开发效率和用户体验。

此处事例理解:Chrome浏览器 — 本地有联网环境 — SSL(必要) — QQ邮箱发送

Chrome

设置浏览器,让Chrome可以在本地发送

Windows:

设置Chrome的快捷方式属性,在“目标”后面加上 —allow-file-access-from-files,注意前面有个空格,重新打开Chrome即可。

  1. --allow-file-access-from-files

Mac:

只能通过终端打开浏览器:打开终端,输入下面命令:open -a “Google Chrome” —args —disable-web-security然后就可以屏蔽安全访问了[ —args:此参数可有可无]

  1. open -a "Google Chrome" --args --disable-web-security

Ajax

  1. SendData(data);//调用
  1. function SendData(data) {//方法
  2. $.ajax({
  3. url:"abc.com/text1",
  4. type:'get',
  5. dataType:"text",
  6. data:{
  7. "data":data,//发送的东西
  8. },
  9. success:function(data){
  10. //成功之后
  11. },
  12. error:function(jqXHR){
  13. }
  14. })
  15. }

QQ邮箱

设置 — 账户 — POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启POP3/SMTP服务和IMAP/SMTP服务
正常来说只需要SMTP就可以,不行的话两个都开
获得密码 — 复制

配置Flask

下载flask-mail
  1. pip install flask-mail

pip安装flask-email

包中文名 释义 跳转
Flask-Mail==0.10.0 / /
├── blinker [required: Any, installed: 1.8.2] / blinker 是一个小巧的 Python 库,用于实现对象之间的信号传递。 /
└── Flask [required: Any, installed: 3.0.3] / 主程序 /
├── blinker [required: >=1.6.2, installed: 1.8.2] / 同上 /
├── click [required: >=8.1.3, installed: 8.1.7] / Click是一个Python库,用于创建命令行界面,支持装饰器语法,易于创建命令行应用程序。 /
├── itsdangerous [required: >=2.1.2, installed: 2.2.0] / itsdangerous是一个Python库,用于安全地传递信任数据,支持签名和加密,常用于Web应用中的会话管理和数据验证。 /
├── Jinja2 [required: >=3.1.2, installed: 3.1.4] / Jinja2是一个现代且设计友好的Python模板引擎,广泛用于Web应用开发。 Flask - 扩展 - jinja2 - 模版处理信息 - {{}}
│ └── MarkupSafe [required: >=2.0, installed: 3.0.1] / MarkupSafe 是一个 Python 库,用于安全地处理和转义 HTML 和 XML 标记。 /
└── Werkzeug [required: >=3.0.0, installed: 3.0.4] / Werkzeug是Python的WSGI工具包,用于开发Web应用程序,提供请求、响应对象和中间件。 /
└── MarkupSafe [required: >=2.1.1, installed: 3.0.1] / 同上 /

.py

  1. from flask import Flask, jsonify, request, url_for,render_template,flash,make_response
  2. from flask_mail import Mail, Message
  3. from threading import Thread
  4. app = Flask(__name__)
  5. ## 配置邮件:服务器/端口/安全套接字层/邮箱名/授权码
  6. app.config['MAIL_SERVER'] = 'smtp.qq.com' # 邮箱服务器
  7. ## app.config['MAIL_PORT'] = 465 # SSL端口
  8. ## app.config['MAIL_USE_SSL'] = True # 重要,qq邮箱需要使用SSL
  9. ## app.config['MAIL_USE_TLS'] = False # 不需要使用TLS
  10. app.config['MAIL_PORT'] = 587 # SSL端口,服务器
  11. app.config['MAIL_USE_TLS'] = True # 需要使用TLS,服务器
  12. app.config['MAIL_USERNAME'] = '123456789@qq.com' # 填邮箱
  13. app.config['MAIL_PASSWORD'] = '填授权码' # 填授权码
  14. app.config['MAIL_DEFAULT_SENDER'] = '123456789@qq.com' # 填邮箱,默认发送者
  15. mail = Mail(app) # 然后实例化,Mail对象
  16. ## text1发送data2
  17. @app.route("/text1", methods=['GET','POST'])
  18. def text1():
  19. data2 = request.args['data']
  20. print(data2)
  21. msg = Message(subject=发了个啥玩意?, # 主题
  22. sender="123456789@qq.com", # 需要使用默认发送者则不用填
  23. recipients=['111111111@qq.com','222222222@qq.com','333333333@qq.com'],
  24. body=data2,
  25. )
  26. thread = Thread(target=send_async_email, args=[app, msg])
  27. thread.start()
  28. return "ok"
  29. ## 异步发送邮件
  30. def send_async_email(app, msg):
  31. with app.app_context():
  32. mail.send(msg)
  33. if __name__ == '__main__':
  34. app.run(host='127.0.0.1',port=8000)#运行在8000端口
参数名称 类型 说明
subject string 主题
recipients list 收件人邮箱
body string 主体文本
html string 主体文本
attachments list 附件

如果是蓝图方式

  1. # __init__.py
  2. from flask_mail import Mail, Message
  3. def create_app():
  4. # 配置代码
  5. mail = Mail(app)
  6. # 配置代码
  7. return app
  1. ## 使用的.py
  2. from flask_mail import Mail, Message
  3. mail = Mail() # 然后实例化,Mail对象
  4. Email = Blueprint('Email',__name__)
  5. @Email.route("/email", methods=['POST'])
  6. def checkemail():
  7. try:
  8. # 发邮件
  9. msg = Message(subject='主题', # 主题
  10. # sender="", # 需要使用默认发送者则不用填
  11. recipients=['12345678@qq.com'],
  12. body='data',
  13. )
  14. thread = Thread(target=send_async_email, args=[Email, msg])
  15. thread.start()
  16. return jsonify({"data":"ok"})
  17. except:
  18. traceback.print_exc()
  19. return jsonify({"data":"参数要全/失败"})
  20. ## 异步发送邮件
  21. def send_async_email(app, msg):
  22. from app import create_app
  23. app = create_app()
  24. with app.app_context():
  25. mail.send(msg)