from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField,PasswordField
from wtforms.validators import DataRequired,Length,Email
from flask import Flask
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = 'r3t058rf3409tyh2g-rwigGWRIGh[g'
app.config['MAIL_SERVER']='smtp.googlemail.com'
app.config['MAIL_PORT']=587
app.config['MAIL_USE_TLS']=True
app.config['MAIL_USERNAME']=os.environ.get('EMAIL_USER')
app.config['MAIL_PASSWORD']=os.environ.get('EMAIL_PASS')
mail=Mail(app)
db = SQLAlchemy(app)
logMg=LoginManager(app)
logMg.login_view='login'
logMg.login_message_category='info'
bcrypt=Bcrypt()
from portfolio import routes
def send_reset_email(user):
token=user.get_reset_token()
msg=Message('Password Reset Request',sender='noreply@demo.com',recipients=[user.email])
msg.body=''' To reset your password visit the following link:
{ url_for('reset_token',token=token,_external=True) }
If you did not Make request please contact our Team
'''
mail.send(msg)
@app.route("/reset_password",methods=['GET','POST'])
def reset_request():
if current_user.is_authenticated:
return redirect(url_for('admin'))
form=RequestResetForm()
if form.validate_on_submit():
user=User.query.filter_by(email=form.email.data).first()
send_reset_email(user)
flash('Reset Email Link Sent')
return redirect(url_for('login'))
return render_template("reset_request.html",form=form,legend='Edit Post')
@app.route("/reset_password/<token>",methods=['GET','POST'])
def reset_token():
if current_user.is_authenticated:
return redirect(url_for('admin'))
user=User.verify_reset_token(token)
if user is None:
flash('Invalid or Expired Token','warning')
return redirect(url_for(reset_request))
form=ResetPasswordForm()
if form.validate_on_submit():
hashed_password=bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user.password=hashed_password
db.session.commit()
flash('Password Changed!','success')
return redirect(url_for('Login'))
return render_template('reset_token',form=form,legend='Reset Password Form')
一直收到此错误以对发件人进行身份验证,我尝试更改为我的电子邮件并启用了IMAP设置,但没有用
smtplib.SMTPSenderRefused smtplib.SMTPSenderRefused:(530,需要b'5.7.0身份验证。有关详细信息,请参见\ n5.7.0 https://support.google.com/mail/?p=WantAuthError t20sm2139075wmi.2-gsmtp','noreply@demo.com')
回溯(最近通话最近) 调用中的文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,行2464 返回self.wsgi_app(环境,start_response)
wsgi_app中的文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,第2450行 响应= self.handle_exception(e)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,行1867,在handle_exception中 重新提高(exc_type,exc_value,tb)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask_compat.py”,第39行,重新发行 提高价值
wsgi_app中的文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,第2447行 响应= self.full_dispatch_request()
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,行1952,在full_dispatch_request中 rv = self.handle_user_exception(e)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,handle_user_exception中的第1821行 提高(exc_type,exc_value,tb)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask_compat.py”,第39行,重新发行 提高价值
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,行1950,在full_dispatch_request中 rv = self.dispatch_request()
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask \ app.py”,行1936,在dispatch_request中 返回self.view_functionsrule.endpoint
reset_request中的文件“ C:\ Dev \ Visual Studio 2019 \ Projects \ portfolio \ portfolio \ routes.py”,行177 send_reset_email(用户)
send_reset_email中的第168行的文件“ C:\ Dev \ Visual Studio 2019 \ Projects \ portfolio \ portfolio \ routes.py” mail.send(msg)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask_mail.py”在发送中的第492行 message.send(连接)
发送中的文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask_mail.py”,行427 connection.send(self)
文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ site-packages \ flask_mail.py”在发送中位于第192行 message.rcpt_options)
sendmail中的文件“ C:\ Program Files(x86)\ Microsoft Visual Studio \ Shared \ Python37_64 \ lib \ smtplib.py”,行867 引发SMTPSenderRefused(代码,resp,from_addr)
smtplib.SMTPSenderRefused:(530,要求b'5.7.0身份验证。在\ n5.7.0 https://support.google.com/mail/?p=WantAuthError t20sm2139075wmi.2-gsmtp','noreply@demo.com'了解更多信息)
答案 0 :(得分:2)
先决条件
完成上述所有先决条件后,请尝试检查是否可以首先从命令行获取那些变量。
转到命令提示符,键入Echo%EMAIL_USER%,期望的输出结果是您的电子邮件。如果%EMAIL_USER%也返回了,则说明您错误地配置了上面的步骤2。
请勿从VS Code执行Python文件。此问题也与Pycharm用户相似。我认为VS代码可能无法以某种方式访问OS环境(可能我不确定如何配置)。另一种解决方案是通过命令行激活虚拟环境,然后通过命令行运行Python-打开命令提示符,然后转到您的Python程序文件夹。 CD脚本并执行“激活”
2.1测试您的Python是否可以通过执行Python并导入os来获取操作系统环境,然后
print (os.environ.get("EMAIL_USER"))
期望的输出是您的电子邮件地址。
2.2完成后,您将返回主程序文件夹并执行Python run.py
您可以尝试的第二件事: 而不是使用TLS,
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
答案 1 :(得分:1)
我遇到了同样的错误,当我从新终端运行flask脚本时,它解决了。 更改环境变量时,请确保重新启动终端和IDE。
答案 2 :(得分:0)
先决条件
检查控制面板\系统和安全\系统->高级设置->环境变量。 单击新建 --> 变量名称 -- 无论您在 init.py 文件(EMAIL_USER)中给出的变量是什么,变量值 --- 您想要发送的电子邮件给例如:test@demo.com 密码类似: 变量名称——无论你在 init.py 文件(EMAIL_PASS)中给出的变量是什么,变量值——链接到该邮件(test@demo.com)的密码,例如:#$62GNMi。
注意:
如果您使用任何 IDE,例如 sublime text、pycharm.... 请确保 您关闭虚拟环境并重新启动虚拟环境 如果您在 Windows 中进入您的项目路径并使用 (env_name\Scripts\activate.bat) 并重新启动您的应用程序。
同时在您的 Gmail 帐户中启用安全性较低的应用访问 https://www.google.com/settings/security/lesssecureapps
答案 3 :(得分:0)
你是通过 CoreySchafer 的 Flask 课程做到的,我也是。所以,我找到了决心。
如果你有 Ubuntu 或 manjaro,你需要编写你的环境变量
不是 .bash_profile 文件,
但是到 .bashrc
然后您需要通过键入 . ~/.bashrc
或 source ~/.bashrc
如果不起作用,请重新启动系统。它对我有用。
答案 4 :(得分:0)
就我而言,问题出在“VS Code Python 终端”上。
除了接受的答案:
尝试从“Python 终端”切换到“CMD 终端”在 VS Code 上对我有用!
答案 5 :(得分:0)
1.打开您的 Google 管理控制台 (admin.google.com)。 2. 单击安全 > 基本设置。 3.在安全性较低的应用程序下,选择转到安全性较低的应用程序的设置。 在子窗口中,选择对所有用户强制访问安全性较低的应用程序 单选按钮。 (您也可以使用允许用户管理他们对不太安全的应用程序的访问,但 不要忘记在用户设置中打开不太安全的应用程序选项!) 5.点击保存按钮。
1.转到您的 (Google Account)。 2.在左侧导航面板上,单击安全。 3.在页面底部的“不太安全的应用程序访问”面板中,单击“打开访问”。 如果您没有看到此设置,则您的管理员可能已关闭较少 安全的应用程序帐户访问(检查上面的说明)。 4.点击保存按钮。