init.py
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
字符串
Routes.py
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 ')
Traceback(most recent call last)File“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,line 2464,incallreturn self.wsgi_app(environ,start_response)
File“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,line 2450,in wsgi_app response = self.handle_exception(e)
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,第1867行,在handle_exception reraise(exc_type,exc_value,tb)中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask_compat.py”,第39行,在reraise raise value中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,line 2447,in wsgi_app response = 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”,第1821行,在handle_user_exception reraise(exc_type,exc_value,tb)中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask_compat.py”,第39行,在reraise raise value中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,第1950行,in 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 return self.view_functionsrule.endpoint
文件“C:\Dev\Visual Studio 2019\Projects\portfolio\portfolio\routes.py”,第177行,在reset_request send_reset_email(user)中
文件“C:\Dev\Visual Studio 2019\Projects\portfolio\portfolio\routes.py”,第168行,在send_reset_email mail.send(msg)中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask_mail.py”,第492行,在send message.send(connection)中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask_mail.py”,第427行,在send connection.send(self)中
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask_mail.py”,line 192,in send message.rcpt_options)
文件“C:\Program Files(x86)\Microsoft Visual Studio\Shared\Python37_64\lib\smtplib.py”,第867行,在sendmail中引发SMTPSenderRefused(code,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 ')
8条答案
按热度按时间t3irkdon1#
先决条件
1.你需要一个有效的Gmail帐户,这意味着你需要知道电子邮件地址和密码
1.你必须将这些电子邮件地址和密码添加到Windows系统变量。(EMAIL_USER和EMAIL_PASSWORD)
1.您需要在Gmail帐户安全中打开“不太安全的应用程序访问”。你可以谷歌一下。
一旦所有上述先决条件已经完成,尝试检查,你可以得到这些变量从命令行第一。
1.转到命令提示符,键入Echo %EMAIL_USER%,预期返回的输出是您的电子邮件。如果%EMAIL_USER%也返回,则说明上述步骤2配置不正确。
1.不要从VS Code执行Python文件。这个问题类似于Pycharm用户。我认为VS代码可能无法以某种方式访问操作系统环境(可能我不知道如何配置)。另一种解决方案是通过命令行激活虚拟环境,然后通过命令行运行Python-打开命令提示符并转到Python程序文件夹。CD脚本并执行“激活”
2.1测试你的Python是否可以通过执行Python并导入os来获得OS环境,然后
字符串
预期输出是您的电子邮件地址。
2.2完成后,返回到主程序文件夹并执行Python run.py
1.尝试重置密码。应发送电子邮件。我现在收到邮件了。
第二件你可以尝试的事情:代替使用TLS,
型
vxqlmq5t2#
我得到了同样的错误,它解决了当我从新的终端运行 flask 脚本。在更改环境变量时,请确保重新启动终端和IDE。
fcg9iug33#
先决条件
检查控制面板\系统和安全\系统->高级设置->环境变量。单击New--> Variable name --无论您在init.py文件(EMAIL_USER)中提供了什么变量,变量值-您要给予的电子邮件,例如:test@demo.com密码:变量名--无论你在init.py文件(EMAIL_PASS)中给出了什么变量,变量值--链接到该邮件的密码(test@demo.com)例如:#$62GNMi。
备注:
rt4zxlrg4#
你用CoreySchafer的Flask课程来做我也是所以我找到了决定。
如果你有Ubuntu或manjaro,你需要写你的环境变量不是.bash_profile文件,而是.bashrc,然后你需要通过输入
. ~/.bashrc
或source ~/.bashrc
重新加载.bashrc文件如果不起作用,请重新启动系统。对我很有效。
2o7dmzc55#
在我的例子中,问题是“VS Code Python终端”。
尝试从“Python终端”切换到“CMD终端”对我来说在VS Code上很有效!
在VS代码终端上点击+按钮,选择CMD终端并运行程序。x1c 0d1x的数据
bbmckpt76#
1.以邮件域管理员身份开启“不太安全的应用”设置
1.打开Google管理控制台(admin.google.com)。
1.单击安全性>基本设置。
1.在“不太安全的应用程序”下,选择“转到不太安全的应用程序的设置”。在子窗口中,选择强制所有用户访问不太安全的应用单选按钮。
(You也可以使用允许用户管理他们对不太安全的应用程序的访问,但不要忘记在用户的设置中打开不太安全的应用程序选项!)
1.单击“保存”按钮。
2.以邮箱用户身份开启“不太安全的应用”设置
1.转到您的(Google Account)。
1.在左侧导航面板上,单击“安全性”。
1.在页面底部的“不太安全的应用程序访问”面板中,单击“打开访问”。* 如果您看不到此设置,则管理员可能已关闭安全性较低的应用帐户访问 *(请查看上面的说明)。
1.单击“保存”按钮。
fdbelqdn7#
如果您的项目托管
*注意: 生成应用密码后,请确保不要在您的应用以外的其他任何地方使用它,因为它无法工作,您必须生成一个新密码 *
ldxq2e6h8#
如果您的项目在本地主机上运行
import os
my_email = os.environ.get('USER_EMAIL')
my_password = os.environ.get('USER_PASSWORD')
print(my_email, my_password)
打印的凭证应该与 *.bashrc文件 * 和 *Windows环境变量 * 中的凭证相似