——————————————————————前言————————————————————————————
为了和用户进行沟通, 我们在web程序中添加发送邮件的功能。
————————————————————————————————————————————————————
一. 安装flask-mail扩展
&pip install flask-mail
二. 修改hello.py文件
from flask-mail import Mail
#设置config字典
app.config['MAIL_SERVER'] = 'smtp.qq.com' #邮件服务器
app.config['MAIL_PORT'] = 587 #发送邮件的端口
app.config['MAIL_USE_TLS'] = True #安全传输协议开关
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') #邮件用户名
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD') #邮件用户密码
app.config['FLASKY_MAIL_SENDER'] = '1660705191@qq.com' #发件人, 可与邮件用户名相同
app.config[FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' #邮件主题前缀
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN') #程序管理员邮箱地址
mail = MAIL(app) #初始化扩展
#发送邮件函数
def send_mail(to, subject, template, **kwargs):
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX']+subject, sender=os.config['FLASKY_MAIL_SENDER'], recipients=[to]) #创建邮件
msg.body = render_template(template+'.txt', **kwargs)
msg.html = render_template(template+'.html, **kwargs') #定义邮件内容 模板内容见文末
mail.send(msg) #发送邮件
#视图函数
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.name.data).first()
if not user: #如果数据库中无此用户
user = User(username=form.name.data)
db.session.add(user)
session['known'] = False
if app.config['FLASKY_ADMIN']: #如果存在管理员邮箱地址
send_mail(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user) #给管理员发送邮件
else:
session['known'] = True
session['name'] = form.name.data
form.name.data = ''
return redirect(url_for('index'))
return render_template('index.html', name=session.get(name), known = session.get('known'), form=form)
三. 在终端导入环境变量
注意一定不要忘记导入环境变量, 之后config字典才能用os.environ.get语句获得变量值
&export MAIL_USERNAME=1660513198@qq.com
&export MAIL_PASSWORD=zwafjugafahqehic
&export FLASKY_ADMIN=15789653214@163.com
四. 运行web程序
打开数据库:
运行web程序:
在浏览器输入根地址127.0.0.1:5000:
在文本框输入Dave并点击提交按钮:
此时数据库多了一个Dave用户:
并且管理员收到一封邮件:
再次在文本框输入Dave并点击提交按钮:
可根据视图函数来分析浏览器界面的变化。
附.模板内容
mail/new_user.txt
User {{ user.username }} has joined.
mail/new_user.html
User <b>{{ user.username}}</b> has joined.