Flask Web开发第七章,调完项目结构以后,发现新加入用户不会发送邮件了?

问题描述

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
          

你期待的结果是什么?实际看到的错误信息又是什么?

程序运行后输入用户名,没有报错,但也没收到新用户加入的邮件,如何才能收到邮件。。。看不出是哪里错了

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题