import os from flask import Flask, render_template, session, redirect, url_for from flask_script import Manager, Shell from flask_bootstrap import Bootstrap from flask_moment import Moment from flask_wtf import Form from wtforms import StringField, SubmitField from wtforms.validators import Required from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate, MigrateCommand from flask_mail import Mail basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config['SECRET_KEY'] = 'hard to guess string' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite') app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['MAIL_SERVER'] = 'smtp.163.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_TLS'] = False app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = 'username@163.com' app.config['MAIL_PASSWORD'] = 'authorization_code ' manager = Manager(app) bootstrap = Bootstrap(app) moment = Moment(app) db = SQLAlchemy(app) migrate = Migrate(app, db) mail = Mail(app) class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) users = db.relationship('User', backref='role', lazy='dynamic') def __repr__(self): return '<Role %r>' % self.name class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) def __repr__(self): return '<User %r>' % self.username class NameForm(Form): name = StringField('What is your name?', validators=[Required()]) submit = SubmitField('Submit') def make_shell_context(): return dict(app=app, db=db, User=User, Role=Role) manager.add_command("shell", Shell(make_context=make_shell_context)) manager.add_command('db', MigrateCommand) @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @app.errorhandler(500) def internal_server_error(e): return render_template('500.html'), 500 @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) session['known'] = False else: session['known'] = True session['name'] = 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 __name__ == '__main__': manager.run()
算是成功了
记录一下 到时放到整合文件里
借鉴了
http://blog.csdn.net/geekleee/article/details/52596417
把hello.py下面两项config直接填进去可以解决,如下
app.config['MAIL_USERNAME'] = '1234567890@qq.com' # 注意两边带'',字符串类型 app.config['MAIL_PASSWORD'] = '授权码' # 注意两边带'
C:UsersGeek LeeGeek-Lee.github.io>venvScriptsactivate (venv) C:UsersGeek LeeGeek-Lee.github.io>set MAIL_USERNAME = 1234567890@qq.co m (venv) C:UsersGeek LeeGeek-Lee.github.io>set MAIL_PASSWORD = absdsdfsdfsfs (venv) C:UsersGeek LeeGeek-Lee.github.io>python hello.py shell >>> from flask_mail import Message >>> from hello import mail >>> msg = Message('test subject', sender='2546701377@qq.com', ... recipients=['2546701377@qq.com']) >>> msg.body = 'text body' >>> msg.html = '<b>HTML</b> body' >>> with app.app_context(): ... mail.send(msg) ... Traceback (most recent call last): File "<console>", line 2, in <module> File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin e 492, in send message.send(connection) File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin e 427, in send connection.send(self) File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin e 192, in send message.rcpt_options) File "E:pythonLibsmtplib.py", line 778, in sendmail raise SMTPSenderRefused(code, resp, from_addr) smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !', '25467013 77@qq.com') >>> ^Z ############################直接在填入电子邮箱和授权码后############ (venv) C:UsersGeek LeeGeek-Lee.github.io>python hello.py shell >>> from flask_mail import Message >>> from hello import mail >>> msg = Message('test subject', sender='2546701377@qq.com', ... recipients=['2546701377@qq.com']) >>> msg.body = 'text body' >>> msg.html = '<b>HTML</b> body' >>> with app.app_context(): ... mail.send(msg) ... >>> ###################成功了########################## ####我想应该是在cmd中写入密码和授权码,但是环境没有接受到的关系,基本可以确定qq邮箱设置是对的,出问题和他没关系
备注,如果用163邮箱,配置要改成:
复制代码
# mail server settings MAIL_SERVER = 'smtp.163.com' MAIL_PORT = 587 MAIL_USE_TLS = True MAIL_USE_SSL = True MAIL_USERNAME = os.environ.get('MAIL_USERNAME') MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') # administrator list ADMINS = ['your-username@163.com']
不过我这里要这样配置
app.config['MAIL_USE_TLS'] = False app.config['MAIL_USE_SSL'] = True