《flask web开发》第六章flask-mail

来源:互联网 发布:大数据 统计区别 编辑:程序博客网 时间:2024/05/23 21:05

flask-mail要使用需先建一个实例msg=Msg()
使用方法参见文档 http://www.pythondoc.com/flask-mail/index.html

这一次是重刷本书,自己写代码,所以并不使用书本上的函数

  1. 配置邮件
app.config['SQLAlchemy_COMMIT_ON_TEARDOWN'] = Trueapp.config['MAIL_SERVER'] = 'smtp.qq.com' #设置邮件服务器app.config['MAIL_PORT'] = 587  #qq邮箱的stmp端口475或587app.config['MAIL_USE_TLS'] = True    #app.config['MAIL_USERNAME'] = '760208296@qq.com' #可以从环境设置,os.environ.get('xxx')app.config['MAIL_PASSWORD'] = '*****'#高能预警!!!此处为邮箱的stmp授权码,不是邮箱密码!app.config['MAIL_SENDER'] = '760208296@qq.com'

2.第二步

当然是写send_email函数啦,书上的写得太复杂,适合正式场合,自己使用,读读文档写一个简单的

def send_email( ): msg = Message(‘hello’, sender=app.config[‘MAIL_SENDER’], recipients=[‘760208296@qq.com’]) msg.body = ‘hello ’ msg.html = ‘<#> someone is coming <#> ’ #替换为html符号,比如h1,h2 mail.send(msg)

第三步: 集成到视图函数里

注意查询时是单个query,要加上first()

@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)            send_email( )            session['know'] = False        else:            session['know'] = 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'), know=session.get('known', False))

第四步: 异步发送邮件

def send_async_email(app, msg):    with app.app_context():        mail.send(msg)def send_email( ):    msg = Message('hello', sender=app.config['MAIL_SENDER'], recipients=['760208296@qq.com'])    msg.body = 'hello, a new user is coming  '    msg.html = '<h1> someone is coming </h1>'    thr = Thread(target=send_async_email, args=[app, msg])    thr.start()    return thr

注意配置里加上这一行,不然无法写入数据

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
0 0