⽬录
系统环境:Ubuntu 18.04.1 LTS
Python使⽤的是虚拟环境:virutalenvPython的版本:Python 3.6.9
flask-mail1.安装flask-mail
pip install flask-mail
2.配置flask-mail使⽤qq邮箱flask-mail STMP服务器的配置
配置
MAIL_SERVERMAIL_PORTMAIL_USE_TLSMAIL_USE_SSL
默认值25FalseFalse
电⼦邮件服务器的端⼝
是否启⽤传输层(TLS,transport layer security)安全协议是否启⽤安全套接字层(SSL,secure sockets Layer)安全协议邮件的⽤户名邮件的密码
说明
localhostsmtp电⼦邮件服务器的主机名或IP地址
MAIL_USERNAMENoneMAIL_PASSWORDNone
app.py代码添加如下 :import os
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')
3.初始化flask-mail
from flask_mail import Mail, Message
mail = Mail(app)
因为⽤户名和密码都是⾮常敏感的信息,可以通过设置环境变量。如下;
export MAIL_USERNAME= flask shell发送邮件(zsdpy1) zsd@zsd-virtual-machine:~/Zflask/app$ flask shellPython 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] on linuxApp: app [production] Instance: /home/zsd/Zflask/app/instance>>> from flask_mail import Message>>> from hello import mail>>> from app import mail >>> msg = Message('测试邮件',sender='3421410@qq.com',recipients=['3421410@qq.com'])>>> msg.body='这是第⼀封flask-mail的测试邮件'>>> with app.app_context():... mail.send(msg)... 可以看到发送⽅和接收⽅是同⼀个⼈。发送的效果如下: 应⽤中集成电⼦邮件发送功能为了避免每次发送邮件要编写,标题,主体,发送⽅等等。可以把通⽤部分抽象出来,定义⼀个函数,避免重复。 app.py再次修改如下: app.config['ZSD_MAIL_SUBJECT_PREFIX'] = '[ZSD博客]' app.config['ZSD_MAIL_SENDER'] = 'ZSD博客 管理员 <3421410@qq.com>'app.config['ZSD_ADMIN'] = os.environ.get('ZSD_ADMIN') def send_email(to, subject, template, **kwargs): msg = Message(app.config['ZSD_MAIL_SUBJECT_PREFIX'] + ' ' + subject, sender=app.config['ZSD_MAIL_SENDER'], recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) mail.send(msg) send_email(to, subject, template, **kwargs)定义了,收件⼈地址,主体,邮件正⽂的模板参数吗和关键字参数列表等。 在index()视图函数中,定义功能:每当form表单提交新的名字,数据库会插⼊⼀条数据,管理员会受到⼀封邮件。如下 : #... app.config['ZSD_ADMIN'] = os.environ.get('ZSD_ADMIN')#... @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 user is None: user = User(username=form.name.data) db.session.add(user) db.session.commit() session['known'] = False if app.config['ZSD_ADMIN']: send_email(app.config['ZSD_ADMIN'],'新⽤户来了','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', form=form, name=session.get('name'),known =session.get('known',False)) 这⾥就添加了两⾏代码: if app.config['ZSD_ADMIN']: send_email(app.config['ZSD_ADMIN'],'新⽤户来了','mail/new_user',user=user) 如上⽤户邮件发送,获得ZSD_ADMIN的环境变量,可以在环境变量⾥⾯配置,配置⽅式如下: export ZSD_ADMIN =3421410@qq.com 还需要添加mail⽬录 (zsdpy1) $ cd templates/(zsdpy1) $ mkdir mail(zsdpy1) $ ls 404.html 500.html base.html index.html mail 添加两个⽂件如下: (zsdpy1) $ cat new_user.html ⽤户 {{ user.username }} 已经加⼊了.插⼊到MySQL数据库中 (zsdpy1) $ cat new_user.txt ⽤户 {{ user.username }} 已经加⼊.插⼊⾄MySQL数据库中. 应⽤演⽰: 邮件发送演⽰: 以上页⾯会停顿⼏秒钟,由于发送邮件和web应⽤是同步应⽤。可以把发送的邮件的改成异步发送。亦或者添加到Celery任务队列中,以后可以继续书写。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务