作用:可以发邮件
Python 的 Flask-Mail
是一个非常实用的 Flask 扩展库,它提供了一个简单易用的接口来发送电子邮件。以下是 Flask-Mail
的一些主要作用和特点:
Flask-Mail
可以发送纯文本邮件和HTML邮件,支持添加附件和嵌入图片。Flask-Mail
支持异步发送邮件,提高了应用程序的响应性能。Flask-Mail
会自动处理邮件头,防止 header injection 攻击。Flask-Mail
支持信号量,可以在邮件发送时触发自定义的信号处理函数。使用 Flask-Mail
,开发者可以在 Flask 应用程序中轻松地添加邮件发送功能,无论是用户注册确认、密码重置通知,还是日常的系统通知,都可以通过 Flask-Mail
来实现。通过简单的配置和几行代码,就可以发送邮件,极大地提高了开发效率和用户体验。
此处事例理解:Chrome浏览器 — 本地有联网环境 — SSL(必要) — QQ邮箱发送
设置浏览器,让Chrome可以在本地发送
设置Chrome的快捷方式属性,在“目标”后面加上 —allow-file-access-from-files,注意前面有个空格,重新打开Chrome即可。
--allow-file-access-from-files
只能通过终端打开浏览器:打开终端,输入下面命令:open -a “Google Chrome” —args —disable-web-security然后就可以屏蔽安全访问了[ —args:此参数可有可无]
open -a "Google Chrome" --args --disable-web-security
SendData(data);//调用
function SendData(data) {//方法
$.ajax({
url:"abc.com/text1",
type:'get',
dataType:"text",
data:{
"data":data,//发送的东西
},
success:function(data){
//成功之后
},
error:function(jqXHR){
}
})
}
设置 — 账户 — POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启POP3/SMTP服务和IMAP/SMTP服务
正常来说只需要SMTP就可以,不行的话两个都开
获得密码 — 复制
pip install flask-mail
包 | 包中文名 | 释义 | 跳转 |
---|---|---|---|
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
from flask import Flask, jsonify, request, url_for,render_template,flash,make_response
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
## 配置邮件:服务器/端口/安全套接字层/邮箱名/授权码
app.config['MAIL_SERVER'] = 'smtp.qq.com' # 邮箱服务器
## app.config['MAIL_PORT'] = 465 # SSL端口
## app.config['MAIL_USE_SSL'] = True # 重要,qq邮箱需要使用SSL
## app.config['MAIL_USE_TLS'] = False # 不需要使用TLS
app.config['MAIL_PORT'] = 587 # SSL端口,服务器
app.config['MAIL_USE_TLS'] = True # 需要使用TLS,服务器
app.config['MAIL_USERNAME'] = '123456789@qq.com' # 填邮箱
app.config['MAIL_PASSWORD'] = '填授权码' # 填授权码
app.config['MAIL_DEFAULT_SENDER'] = '123456789@qq.com' # 填邮箱,默认发送者
mail = Mail(app) # 然后实例化,Mail对象
## text1发送data2
@app.route("/text1", methods=['GET','POST'])
def text1():
data2 = request.args['data']
print(data2)
msg = Message(subject=发了个啥玩意?, # 主题
sender="123456789@qq.com", # 需要使用默认发送者则不用填
recipients=['111111111@qq.com','222222222@qq.com','333333333@qq.com'],
body=data2,
)
thread = Thread(target=send_async_email, args=[app, msg])
thread.start()
return "ok"
## 异步发送邮件
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8000)#运行在8000端口
参数名称 | 类型 | 说明 |
---|---|---|
subject | string | 主题 |
recipients | list | 收件人邮箱 |
body | string | 主体文本 |
html | string | 主体文本 |
attachments | list | 附件 |
# __init__.py
from flask_mail import Mail, Message
def create_app():
# 配置代码
mail = Mail(app)
# 配置代码
return app
## 使用的.py
from flask_mail import Mail, Message
mail = Mail() # 然后实例化,Mail对象
Email = Blueprint('Email',__name__)
@Email.route("/email", methods=['POST'])
def checkemail():
try:
# 发邮件
msg = Message(subject='主题', # 主题
# sender="", # 需要使用默认发送者则不用填
recipients=['12345678@qq.com'],
body='data',
)
thread = Thread(target=send_async_email, args=[Email, msg])
thread.start()
return jsonify({"data":"ok"})
except:
traceback.print_exc()
return jsonify({"data":"参数要全/失败"})
## 异步发送邮件
def send_async_email(app, msg):
from app import create_app
app = create_app()
with app.app_context():
mail.send(msg)