1. import os
  2. from flask import Flask, render_template, session, redirect, url_for
  3. from flask_script import Manager, Shell
  4. from flask_bootstrap import Bootstrap
  5. from flask_moment import Moment
  6. from flask_wtf import Form
  7. from wtforms import StringField, SubmitField
  8. from wtforms.validators import Required
  9. from flask_sqlalchemy import SQLAlchemy
  10. from flask_migrate import Migrate, MigrateCommand
  11. from flask_mail import Mail
  12.  
  13. basedir = os.path.abspath(os.path.dirname(__file__))
  14.  
  15. app = Flask(__name__)
  16. app.config['SECRET_KEY'] = 'hard to guess string'
  17. app.config['SQLALCHEMY_DATABASE_URI'] =\
  18. 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
  19. app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
  20. app.config['MAIL_SERVER'] = 'smtp.163.com'
  21. app.config['MAIL_PORT'] = 465
  22. app.config['MAIL_USE_TLS'] = False
  23. app.config['MAIL_USE_SSL'] = True
  24. app.config['MAIL_USERNAME'] = 'username@163.com'
  25. app.config['MAIL_PASSWORD'] = 'authorization_code '
  26.  
  27. manager = Manager(app)
  28. bootstrap = Bootstrap(app)
  29. moment = Moment(app)
  30. db = SQLAlchemy(app)
  31. migrate = Migrate(app, db)
  32. mail = Mail(app)
  33.  
  34. class Role(db.Model):
  35. __tablename__ = 'roles'
  36. id = db.Column(db.Integer, primary_key=True)
  37. name = db.Column(db.String(64), unique=True)
  38. users = db.relationship('User', backref='role', lazy='dynamic')
  39.  
  40. def __repr__(self):
  41. return '<Role %r>' % self.name
  42.  
  43. class User(db.Model):
  44. __tablename__ = 'users'
  45. id = db.Column(db.Integer, primary_key=True)
  46. username = db.Column(db.String(64), unique=True, index=True)
  47. role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  48.  
  49. def __repr__(self):
  50. return '<User %r>' % self.username
  51.  
  52. class NameForm(Form):
  53. name = StringField('What is your name?', validators=[Required()])
  54. submit = SubmitField('Submit')
  55.  
  56. def make_shell_context():
  57. return dict(app=app, db=db, User=User, Role=Role)
  58. manager.add_command("shell", Shell(make_context=make_shell_context))
  59. manager.add_command('db', MigrateCommand)
  60.  
  61. @app.errorhandler(404)
  62. def page_not_found(e):
  63. return render_template('404.html'), 404
  64.  
  65. @app.errorhandler(500)
  66. def internal_server_error(e):
  67. return render_template('500.html'), 500
  68.  
  69. @app.route('/', methods=['GET', 'POST'])
  70. def index():
  71. form = NameForm()
  72. if form.validate_on_submit():
  73. user = User.query.filter_by(username=form.name.data).first()
  74. if user is None:
  75. user = User(username=form.name.data)
  76. db.session.add(user)
  77. session['known'] = False
  78. else:
  79. session['known'] = True
  80. session['name'] = form.name.data
  81. return redirect(url_for('index'))
  82. return render_template('index.html', form=form, name=session.get('name'),
  83. known=session.get('known', False))
  84.  
  85. if __name__ == '__main__':
  86. manager.run()

算是成功了

记录一下 到时放到整合文件里

借鉴了

http://blog.csdn.net/geekleee/article/details/52596417

把hello.py下面两项config直接填进去可以解决,如下

  1. app.config['MAIL_USERNAME'] = '1234567890@qq.com'
  2. # 注意两边带'',字符串类型
  3. app.config['MAIL_PASSWORD'] = '授权码'
  4. # 注意两边带'
  1. C:\Users\Geek Lee\Geek-Lee.github.io>venv\Scripts\activate
  2.  
  3. (venv) C:\Users\Geek Lee\Geek-Lee.github.io>set MAIL_USERNAME = 1234567890@qq.co
  4. m
  5.  
  6. (venv) C:\Users\Geek Lee\Geek-Lee.github.io>set MAIL_PASSWORD = absdsdfsdfsfs
  7.  
  8. (venv) C:\Users\Geek Lee\Geek-Lee.github.io>python hello.py shell
  9. >>> from flask_mail import Message
  10. >>> from hello import mail
  11. >>> msg = Message('test subject', sender='2546701377@qq.com',
  12. ... recipients=['2546701377@qq.com'])
  13. >>> msg.body = 'text body'
  14. >>> msg.html = '<b>HTML</b> body'
  15. >>> with app.app_context():
  16. ... mail.send(msg)
  17. ...
  18. Traceback (most recent call last):
  19. File "<console>", line 2, in <module>
  20. File "C:\Users\GEEKLE~1\GEEK-L~1.IO\venv\lib\site-packages\flask_mail.py", lin
  21. e 492, in send
  22. message.send(connection)
  23. File "C:\Users\GEEKLE~1\GEEK-L~1.IO\venv\lib\site-packages\flask_mail.py", lin
  24. e 427, in send
  25. connection.send(self)
  26. File "C:\Users\GEEKLE~1\GEEK-L~1.IO\venv\lib\site-packages\flask_mail.py", lin
  27. e 192, in send
  28. message.rcpt_options)
  29. File "E:\python\Lib\smtplib.py", line 778, in sendmail
  30. raise SMTPSenderRefused(code, resp, from_addr)
  31. smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !', '25467013
  32. 77@qq.com')
  33. >>> ^Z
  34. ############################直接在填入电子邮箱和授权码后############
  35.  
  36. (venv) C:\Users\Geek Lee\Geek-Lee.github.io>python hello.py shell
  37. >>> from flask_mail import Message
  38. >>> from hello import mail
  39. >>> msg = Message('test subject', sender='2546701377@qq.com',
  40. ... recipients=['2546701377@qq.com'])
  41. >>> msg.body = 'text body'
  42. >>> msg.html = '<b>HTML</b> body'
  43. >>> with app.app_context():
  44. ... mail.send(msg)
  45. ...
  46. >>>
  47. ###################成功了##########################
  48. ####我想应该是在cmd中写入密码和授权码,但是环境没有接受到的关系,基本可以确定qq邮箱设置是对的,出问题和他没关系

备注,如果用163邮箱,配置要改成: 
复制代码

  1. # mail server settings
  2. MAIL_SERVER = 'smtp.163.com'
  3. MAIL_PORT = 587
  4. MAIL_USE_TLS = True
  5. MAIL_USE_SSL = True
  6. MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
  7. MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
  8. # administrator list
  9. ADMINS = ['your-username@163.com']

不过我这里要这样配置

  1. app.config['MAIL_USE_TLS'] = False
  2. app.config['MAIL_USE_SSL'] = True

Flask Web 发送邮件单文件的更多相关文章

  1. Flask:web表单

    客户端发送的所有通过POST发出的请求信息都可以通过request.form获取.但是如果我们要生成表单的HTML代码和验证提交的表单数据那么就需要采用另外的方法.Flask-WTF扩展可以把处理we ...

  2. flask web 表单验证 WTForms

    简介 WTForms 是一个flask集成框架,或者说是库,用于处理浏览器表单提交的数据,它在flask-WTF的基础上扩展并添加了一些随手可得的精巧帮助函数,这些函数将会是在flask里使用表单更加 ...

  3. 《DotNet Web应用单文件部署系列》二、打包wwwroot文件夹

    在这篇文章中,你将学到web缓存规则,文件传输中用到的压缩格式,以及如何手写代码响应请求.最后还能学到快速打包wwwroot文件夹组件用法. 一.了解Response Header 当第一次加载程序时 ...

  4. 轻量级Web框架Flask——Web表单

    安装 Flask-WTF及其依赖可使用pip安装 pip install flask_wtf 配置 要求应用配置一个密钥.密钥是一个由随机字符构成的唯一字符串,通过加密或签名以不同的方式提升应用的安全 ...

  5. 《DotNet Web应用单文件部署系列》一、pubxml文件配置

    很多人想用DotNet开发软件赚点外快子补添家用,但心里总放不下心来,担心被人破解了.好消息是去年发布的DotNet 5支持单文件部署,不同于DotNet 3运行时将文件释放到临时文件夹内,DotNe ...

  6. 《DotNet Web应用单文件部署系列》三、混淆dll文件

    众所周知,C#编译后的dll文件可被反编译,网上搜索"C# 反编译"会出现一大堆资料.为了提高反编译成本,我们必须对dll文件进行混淆处理. 目前,C#混淆工具很多,我推荐obfu ...

  7. yii2.0单文件上传和多文件上传

    yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...

  8. Flask Web Development —— Web表单(上)

    Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...

  9. flask 利用flask_wtf扩展 创建web表单

    在Flask中,为了处理web表单,我们一般使用Flask-WTF扩展,它封装了WTForms,并且它有验证表单数据的功能 创建语句格式: startTime = DateTimeField('计划开 ...

随机推荐

  1. win7笔记本如何设置共享网络供手机WIFI上网?

    第一步 按WIN+R调出“运行”栏,在“运行”菜单栏输入“cmd”,出现命令提示符,输入命令“netsh wlan set hostednetwork mode=allow ssid=xiaoming ...

  2. UML——用例图

    用例图是在需求分析阶段开发人员和用户对需求规格达成的某种共识.它描写叙述了待开发系统的功能需求. UML视频使我们对用例图的基本组成元素.属性.粒度等有了理论上的理解,我们还须要自己亲自己主动手画一画 ...

  3. HTML5超科幻个人主页

    在线演示地址:http://me.cpwl.site 备用地址:http://cpwl.sinaapp.com 部分截图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  4. 视频生成 量产 win 转 linux ffmpeg linux 安装 对批量视频的尽可能短时间生成

    环境准备 Welcome to aliyun Elastic Compute Service! [root@mytest ~]# pip install baidu-aip Looking in in ...

  5. 关于移动平台的viewport

    viewport是用来设置移动平台上的网页宽度,写device-width比较好,不然会和设备上不一样 在使用device-width之后,图片资源最好使用百分比布局,进行自动缩放. 文字大小是一样的 ...

  6. Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

    题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...

  7. nginx开发(二)配置mp4文件在线播放

    1: 第一步先开打nginx的文件夹遍历功能 vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,在http {下面添加以下内容: autoindex on; #开 ...

  8. 【161】BASH相关文章链接

    ---恢复内容开始--- 1. Linux cat命令详解  --<cat>-- 新建文件 file1.txt,随便输入几行文字 cat 'file1.txt' #显示 'file1.tx ...

  9. 2-3 Vue实例中的数据,事件和方法

    上节课模板是写在Vue的实例里面的,现在我们可以把它恢复出来.写在挂载点的内部,看起来会舒服一点.Vue的数据项,可以配置任意的数据名字. <!DOCTYPE html> <html ...

  10. Ueditor 单独使用上传图片及上传附件方法

    1 <script type="text/plain" id="upload_ue"></script> 2 <script ty ...