flask_mail发送邮件(使用SMTP协议)
程序员文章站
2022-07-08 14:45:43
...
flask_mail发送邮件(使用SMTP协议)
本文介绍使用flask_mail发送邮件
0.获取邮箱的授权码(这里以163邮箱为例)
登录邮箱点击设置中的POP3/SMTP/IMAP
获取授权码
- 这里授权码只展示一次,记得记下来
1.安装flask_mail
pip install flask_mail
2.导包
from flask import Flask,render_template,request
from flask_mail import Mail,Message
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
from wtforms import SubmitField,StringField,PasswordField
3.配置 config
app = Flask(__name__)
app.config["SECRET_KEY"] = "12345678"
#如果是qq邮箱这里应该为"smtp.qq.com"
app.config['MAIL_SERVER'] = "smtp.163.com"
#如果使用ssl则端口号应为465
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
#发送人的邮箱
app.config['MAIL_USERNAME'] = "aaa@qq.com"
# 这里的密码是之前获取的邮箱授权码
app.config['MAIL_PASSWORD'] = "TOWXXXXXXXMYQF"
# 显示发送人的名字
app.config['MAIL_DEFAULT_SENDER'] = 'aaa@qq.com'
4.实例化Mail
mail = Mail(app)
5.定义邮件发送函数,recipient
为收件人的邮箱,例如:aaa@qq.com
def send_email(recipient):
#recipients参数可以指定多个收件人
message = Message(subject='Overleaf 密码设置',recipients=[recipient])
#如果发送文本,可在上面一行中添加:body='文本内容'
#这里可以发送一个html页面
message.html = render_template('content.html')
mail.send(message) #发送邮件
6.定义表单类
class SignUpForm(FlaskForm):
email = StringField(validators=[DataRequired()],render_kw={'class':"form-control"})
password = PasswordField(validators=[DataRequired()],render_kw={"class":"form-control"})
submit = SubmitField("Sign up",render_kw={"class":"btn-primary btn"})
6.定义视图函数
这里从前端表单获取邮箱地址
@app.route('/',methods=['POST','GET'])
def sign_up():
sp_form = SignUpForm()
if sp_form.validate_on_submit():
recipient = request.form.get("email")
try:
send_email(recipient)
except:
return render_template('wrong.html')
else:
return render_template('success.html',address=recipient)
return render_template('sign_up.html',form=sp_form)
if __name__ == '__main__':
app.run()
当前端提交表单后,可向获取的email地址发送一个邮件,效果如下: