问题描述
Flask Web开发第七章,调完项目结构以后,发现新加入用户不会发送邮件了,也没有报错提示(第六章调试通过是能发送邮件的)。查看过不在收件箱的垃圾邮箱也没有退信行为
问题出现的环境背景及自己尝试过哪些方法
百度了挺久没找到好的解决方法,控制台有如下错误,但感觉不相干
D:pythonlibsite-packagespymysqlcursors.py:170: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 48
4")
相关代码
程序结构:
代码部分:
config.py文件
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config:
SECRET_KEY = 'hard to guess string'
SQLALCHEMY_COMMIT_OM_TEARDOWN = True
FLASKY_MAIL_SUBJECT_PREFIX = '[FLASKY]'
FLASKY_MAIL_SENDER = 'Flasky Admin <********@163.com>'
FLASKY_ADMIN = '*********@qq.com'
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost/flask'
class TestConfig(Config):
TESTING = True
MAIL_SERVER = 'smtp.163.com'
MAIL_PORT = 25
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_USERNAME = '*********@163.com'
MAIL_PASSWORD = '*******'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost/flask'
class ProductionConfig(Config):
pass
config = {
'development':DevelopmentConfig,
'testing':TestConfig,
'production':ProductionConfig,
'default':TestConfig
}
email.py文件
from threading import Thread
from flask import current_app, render_template
from flask_mail import Message
from . import mail
def send_async_mail(app, msg):
with app.app_context():
mail.send(msg)
def send_mail(to, subject, template, **kwargs):
app = current_app._get_current_object()
if app.config['FLASKY_ADMIN']:
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,\
sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
msg.body = render_template(template + '.txt', **kwargs)
msg.html = render_template(template + '.html', **kwargs)
thr = Thread(target=send_async_mail, args=(app, msg))
thr.start()
return thr
view.py文件
from flask import render_template, session, redirect, url_for, current_app
from . import main
from .forms import NameForm
from .. import db
from ..models import User
from ..email import send_mail
@main.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 # 通过session保存 known为False,通过web渲染需要
if current_app.config['FLASKY_ADMIN']: # 如果配置变量有flasky管理员就发送邮件
# 异步发送邮件
send_mail(current_app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user)
else:
session['known'] = True
session['name'] = form.name.data
return redirect(url_for('.index')) # 通过redirect避免用户刷新重复提交
return render_template('index.html', form=form, name=session.get('name'),
known=session.get('known', False))
app/__init__.py文件
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
from flask_moment import Moment
from config import config
bootstrap = Bootstrap()
mail = Mail()
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
你期待的结果是什么?实际看到的错误信息又是什么?
程序运行后输入用户名,没有报错,但也没收到新用户加入的邮件,如何才能收到邮件。。。看不出是哪里错了