python smtplib.SMTPSenderRefused:(530,b '5.7.0需要验证,了解更多信息,请访问\n5.7.0 https://support.google.2-gsmtp ',' noreply@demo.com ')

a0zr77ik  于 2023-08-02  发布在  Python
关注(0)|答案(8)|浏览(141)

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 ')

t3irkdon

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环境,然后

print (os.environ.get("EMAIL_USER"))

字符串
预期输出是您的电子邮件地址。
2.2完成后,返回到主程序文件夹并执行Python run.py
1.尝试重置密码。应发送电子邮件。我现在收到邮件了。
第二件你可以尝试的事情:代替使用TLS,

app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True

vxqlmq5t

vxqlmq5t2#

我得到了同样的错误,它解决了当我从新的终端运行 flask 脚本。在更改环境变量时,请确保重新启动终端和IDE。

fcg9iug3

fcg9iug33#

先决条件
检查控制面板\系统和安全\系统->高级设置->环境变量。单击New--> Variable name --无论您在init.py文件(EMAIL_USER)中提供了什么变量,变量值-您要给予的电子邮件,例如:test@demo.com密码:变量名--无论你在init.py文件(EMAIL_PASS)中给出了什么变量,变量值--链接到该邮件的密码(test@demo.com)例如:#$62GNMi。

  • 打开cmd
  • echo %EMAIL_USER%
  • 它应该显示我们在环境变量(test@demo.com)中给出的邮件,如果没有,则关闭所有打开的cmd提示并重新打开并尝试。
  • echo %EMAIL_PASS%也是如此。
    备注
  • 如果你使用的是sublime text,pycharm,.确保关闭虚拟环境并重新启动虚拟环境(如果您在Windows中)获取项目路径并使用(env_name\Scripts\activate.bat)并重新启动应用程序。
  • 在您的gmail帐户中启用不太安全的应用程序访问https://www.google.com/settings/security/lesssecureapps
rt4zxlrg

rt4zxlrg4#

你用CoreySchafer的Flask课程来做我也是所以我找到了决定。
如果你有Ubuntu或manjaro,你需要写你的环境变量不是.bash_profile文件,而是.bashrc,然后你需要通过输入. ~/.bashrcsource ~/.bashrc重新加载.bashrc文件
如果不起作用,请重新启动系统。对我很有效。

2o7dmzc5

2o7dmzc55#

在我的例子中,问题是“VS Code Python终端”。

  • 除已接受的答案外:*

尝试从“Python终端”切换到“CMD终端”对我来说在VS Code上很有效!
在VS代码终端上点击+按钮,选择CMD终端并运行程序。x1c 0d1x的数据

bbmckpt7

bbmckpt76#

1.以邮件域管理员身份开启“不太安全的应用”设置

1.打开Google管理控制台(admin.google.com)。
1.单击安全性>基本设置。
1.在“不太安全的应用程序”下,选择“转到不太安全的应用程序的设置”。在子窗口中,选择强制所有用户访问不太安全的应用单选按钮。
(You也可以使用允许用户管理他们对不太安全的应用程序的访问,但不要忘记在用户的设置中打开不太安全的应用程序选项!)
1.单击“保存”按钮。

2.以邮箱用户身份开启“不太安全的应用”设置

1.转到您的(Google Account)。
1.在左侧导航面板上,单击“安全性”。
1.在页面底部的“不太安全的应用程序访问”面板中,单击“打开访问”。* 如果您看不到此设置,则管理员可能已关闭安全性较低的应用帐户访问 *(请查看上面的说明)。
1.单击“保存”按钮。

fdbelqdn

fdbelqdn7#

如果您的项目托管

  • 转到您的谷歌account/security,为您正在使用的电子邮件发送电子邮件。
  • 导航至两步验证并打开。
  • 滚动至页面底部,点击【应用密码】
  • 生成一个应用程序密码,你将使用这个密码登录你的谷歌帐户并发送电子邮件。
  • 在您的主机服务(例如railway)上,导航到变量。
  • 创建2个变量,USER_EMAIL的值等于 * 您用于项目的电子邮件地址 *,变量USER_PASSWORD的值等于 * 生成的应用程序密码 *。
    • 重新部署您的应用程序,它应该工作 *
      *注意: 生成应用密码后,请确保不要在您的应用以外的其他任何地方使用它,因为它无法工作,您必须生成一个新密码 *
ldxq2e6h

ldxq2e6h8#

如果您的项目在本地主机上运行

  • 转到your google account/security,用于发送电子邮件的电子邮件
  • 导航至两步验证并打开。
  • 滚动到底部,然后单击应用密码
  • 生成一个应用程序密码,你将使用这个密码登录你的谷歌帐户并发送电子邮件。
  • 保存密码以将其添加到项目中...
  • 在终端上,导航到根目录cd
  • 使用您最喜欢的文本编辑器vi .bashrc打开**.bashrc**文件
  • 在文件顶部添加这一行addexport USER_EMAIL=”your_email@gmail.com“export USER_PASSWORD=“您生成的应用密码”
  • 保存并关闭文件。esc:wq
  • 在邮件配置下,进入项目的settings.py,将EMAIL_HOST_USER值替换为:os.environ.get('USER_EMAIL')EMAIL_HOST_PASSWORD的值,其中:os.environ.get('USER_PASSWORD ')
  • 导航到您的项目目录,并使用source ~/.bashrc获取 *.bashrc文件 * 中所做的更改
  • 重新启动服务器,这应该可以工作。
  • 要确认凭据,请创建一个简单的python文件**check_credential.py* 添加以下内容,然后运行它import osmy_email = os.environ.get('USER_EMAIL')my_password = os.environ.get('USER_PASSWORD')print(my_email, my_password)

打印的凭证应该与 *.bashrc文件 * 和 *Windows环境变量 * 中的凭证相似

相关问题