安装
pip install flask-mail
电子邮件发送和接收的过程
Flask_Mail发送邮件的配置信息
发送邮件的时候需要设置
发件人账户
- 密码
- 收件人
- 邮件标题
- 邮件正文
- QQ邮件服务器的域名或者IP;
需要设置邮箱:设置-账户-开启下面两个服务
开启的时候记录下各有一个码,
from flask_mail import Mail, Message
from flask import Flask, render_template
app = Flask(__name__)
# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或者IP
app.config['MAIL_SERVER'] = 'smtp.qq.com'
# 指定端口, 默认25, 但qq邮箱默认为 端口号465或587;
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = '*********'
# 此处的密码并非邮箱登录密码, 而是开启pop3
app.config['MAIL_PASSWORD'] = "个人密码"#就是开启服务的时候的码
def send_mail(to, subject, info):
mail = Mail(app)
msg = Message(subject=subject,#主题
sender='*********@qq.com',
recipients=to,
body=info
)
with app.app_context():
mail.send(msg)
send_mail(to=['*********@qq.com', '*********@qq.com'], subject="测试",
info="邮件测试正文")
案例
from flask import Flask, render_template redirect flash
from flask_mail import Message, Mail
app = Flask(__name__)
app.config['SECRET_KEY'] = '1111111'
bootstrap = Bootstrap(app)
# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或者IP
app.config['MAIL_SERVER'] = 'smtp.qq.com'
# 指定端口, 默认25, 但qq邮箱默认为 端口号465或587;
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = '*********'
# 此处的密码并非邮箱登录密码, 而是开启pop3
app.config['MAIL_PASSWORD'] = "个人密码"#就是开启服务的时候的码
def send_mail(to, subject, template, **kwargs):
mail = Mail(app)
# app.app_context(): 将之前Flask创建的app作为参数传入AppContext类中,
# 用于存储当前app的相关信息;
with app.app_context():
msg = Message(subject=subject,
sender='**********@qq.com',
recipients=to,
# body=render_template(template + '.txt', **kwargs),
html=render_template(template + '.html', **kwargs)
)
mail.send(msg)
@app.route('/mail/', methods=['GET', 'POST'])
def mail():
# 实例化表单
form = MailForm()
if form.validate_on_submit():
# 获取用户提交的数据;
toEmails = form.toEmails.data.split(',')
toFilename = form.toFilename.data
try:
send_mail(toEmails, "邮件测试", toFilename)
except Exception as e:
flash("邮件发送失败, 失败原因: %s!" %(e))
else:
flash("邮件发送成功!")
return redirect(url_for('mail'))
return render_template('send_mail.html',
form = form)
class MailForm(FlaskForm):
# 接收邮件的地址
toEmails = TextAreaField(
label="接收的邮箱地址",
validators=[DataRequired()],
# 表单的详细描述, 一般不写
description="每个邮箱地址之间用逗号分隔"
)
toFilename = SelectField(
label="邮件内容的类型",
# "company", 是传递给后台的, "公司简介"是在前端显示的;
choices =[("company", "公司简介"), ("course", "课程简介")]
)
submit = SubmitField(
label="发送"
)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 style="color: red">公司简介</h1>
</body>
</html>