flask web 编程学习笔记5:E-Mail


Flask 可快速简单的实现E-Mail的功能,可以用于用户注册,找回密码等功能,且邮件内容灵活。
复制下述代码的内容,修改成自己的邮箱和一些配置文件就可以实现简单的邮件发送功能。

  1. ''' 
  2.     Note5. E-Mail And Example 
  3. '''  
  4. #  
  5. #########################################################################  
  6. #  
  7. #     E-Mail 由flask-mail提供支持,若不验证,Flask-Mail 会连接localhost   
  8. # 上的端口25,无需验证即可发送电子邮件。  
  9. #     安装方法:pip install flask-mail  
  10. #  
  11. #########################################################################  
  12. #  
  13. import os  
  14. from flask import Flask  
  15. #  
  16. from flask.ext.mail import Mail, Message  
  17. #  
  18. from threading import Thread  
  19. #  
  20. app = Flask(__name__)  
  21. mail = Mail(app)  
  22. #  
  23. # 若配置外部邮箱使用如下方式:  
  24. #  
  25. app.config['MAIL_SERVER'] = 'xxx.mxhichina.com'  
  26. app.config['MAIL_PORT'] = 587  
  27. app.config['MAIL_USE_TLS'] = True  
  28. #  
  29. # windows使用如下方式设置环境变量即可:  
  30. # (venv) $ set MAIL_USERNAME=  
  31. # (venv) $ set MAIL_PASSWORD=  
  32. #  
  33. app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')  
  34. #  
  35. # Linux使用如下方式设置环境变量即可:  
  36. # (venv) $ export MAIL_USERNAME=  
  37. # (venv) $ export MAIL_PASSWORD=  
  38. #  
  39. app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')  
  40. #  
  41. # Flask-Mail SMTP服务器的配置:  
  42. # |--------------------------------------------------------------------------------  
  43. # | 配  置         默认值         说  明  
  44. # |--------------------------------------------------------------------------------  
  45. # | MAIL_SERVER     localhost   电子邮件服务器的主机名或IP 地址  
  46. # | MAIL_PORT       25          电子邮件服务器的端口  
  47. # | MAIL_USE_TLS    False       启用传输层安全(Transport Layer Security,TLS)协议  
  48. # | MAIL_USE_SSL    False       启用安全套接层(Secure Sockets Layer,SSL)协议  
  49. # | MAIL_USERNAME   None        邮件账户的用户名  
  50. # | MAIL_PASSWORD   None        邮件账户的密码  
  51. # | --------------------------------------------------------------------------------  
  52. #  
  53.   
  54. app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'  
  55. #  
  56. app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'  
  57. # ...  
  58. app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')  
  59. # ...  
  60.   
  61. def send_email(to, subject, template, **kwargs):  
  62.     msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,  
  63.     sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])  
  64.     msg.body = render_template(template + '.txt', **kwargs)  
  65.     msg.html = render_template(template + '.html', **kwargs)  
  66.     mail.send(msg)  
  67.   
  68. def send_async_email(app, msg):  
  69.     with app.app_context():  
  70.         mail.send(msg)  
  71.           
  72. def thr_send_email(to, subject, template, **kwargs):  
  73.     msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,\  
  74.                   sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])  
  75.     msg.body = render_template(template + '.txt', **kwargs)   
  76.     msg.html = render_template(template + '.html', **kwargs)  
  77.     thr = Thread(target=send_async_email, args=[app, msg])  
  78.     thr.start()  
  79.     return thr  
  80.       
  81.       
  82. @app.route('/', methods=['GET', 'POST'])  
  83. def index():  
  84.     form = NameForm()  
  85.     if form.validate_on_submit():  
  86.         user = User.query.filter_by(username=form.name.data).first()  
  87.         if user is None:  
  88.             user = User(username=form.name.data)  
  89.             db.session.add(user)  
  90.             session['known'] = False  
  91.             if app.config['FLASKY_ADMIN']:  
  92.                 send_email(app.config['FLASKY_ADMIN'], 'New User',\  
  93.                            'mail/new_user', user=user)  
  94.         else:  
  95.             session['known'] = True  
  96.         session['name'] = form.name.data  
  97.         form.name.data = ''  
  98.         return redirect(url_for('index'))  
  99.     return render_template('index.html',\   
  100.                            form=form,\   
  101.                            name=session.get('name'),\  
  102.                            known=session.get('known', False))          
  103.   
  104. if __name__ == '__main__':  
  105.     app.run(debug=True)  

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/flask-web-%e7%bc%96%e7%a8%8b%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b05%ef%bc%9ae-mail.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注