本文共 2278 字,大约阅读时间需要 7 分钟。
——————————————————————前言————————————————————————————
为了和用户进行沟通, 我们在web程序中添加发送邮件的功能。
————————————————————————————————————————————————————
&pip install flask-mail
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程序:
在浏览器输入根地址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.