Flask实现注册发确认邮件功能时报错No module named 'flask_mail'
报错原因及解决方案
1. 解决ModuleNotFoundError: No module named 'flask_mail'
这个报错是因为你的Python环境没有安装Flask-Mail依赖包,在对应环境下执行以下命令安装即可:
pip install flask-mail
如果使用了虚拟环境,请先激活虚拟环境再执行安装命令。
2. 代码其他问题修复(修复后可解决Internal Server Error)
安装完依赖后运行还会触发500错误,是因为代码存在几处语法和逻辑错误,按以下修改即可:
- MAIL_SERVER配置缺失引号
原代码中smtp.gmail.com是字符串类型,未加引号会被识别为未定义变量,修改为:app.config["MAIL_SERVER"] = "smtp.gmail.com" - 未定义
name变量就直接调用
你在写入REGISTRANTS字典和插入数据库时都用到了name变量,但代码中没有从表单获取该字段的逻辑,需要补充:
首先在获取email的代码下方新增行,获取表单中的name参数:
同时补充对应的校验逻辑,避免参数为空:name = request.form.get("name")if not name: return render_template("failure.html", message="姓名未填写") - 路由跳转写法不规范
原代码return redirect("success")建议修改为更规范的写法,避免路由匹配异常:
注意需要先在flask的导入语句中新增return redirect(url_for("success"))url_for:from flask import Flask, redirect, render_template, request, url_for
额外注意事项
你代码中调用的os.getenv读取的三个邮箱配置参数,需要确保运行项目的系统环境中已经正确配置了对应的值,否则会出现邮箱发件失败的问题。如果使用G邮箱发件,需要提前开启账号两步验证,并生成应用专用密码作为MAIL_PASSWORD的值,避免谷歌拦截发件请求。
内容的提问来源于stack exchange,提问作者Nisarg Kudgunti
相关产品推荐
相关产品推荐

