smtplib.SMTPSenderRefused:(530,b'5.7.0 需要身份验证。在\n5.7.0 https://support.google.2 - gsmtp','noreply@de

Posted

技术标签:

【中文标题】smtplib.SMTPSenderRefused:(530,b\'5.7.0 需要身份验证。在\\n5.7.0 https://support.google.2 - gsmtp\',\'noreply@demo.com\' 了解更多信息)【英文标题】:smtplib.SMTPSenderRefused: (530, b'5.7.0 Authentication Required. Learn more at\n5.7.0 https://support.google.2 - gsmtp', 'noreply@demo.com')smtplib.SMTPSenderRefused:(530,b'5.7.0 需要身份验证。在\n5.7.0 https://support.google.2 - gsmtp','noreply@demo.com' 了解更多信息) 【发布时间】:2020-08-19 12:12:01 【问题描述】:

初始化.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(最近一次调用最后一次) 调用中的文件“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,第 2464 行 return self.wsgi_app(environ, start_response)

文件“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,第 2450 行,在 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 行,重新提出 提升价值

文件“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py”,第 2447 行,在 wsgi_app 响应 = 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 行,重新提出 提升价值

文件“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

文件“C:\Dev\Visual Studio 2019\Projects\portfolio\portfolio\routes.py”,第 177 行,在 reset_request send_reset_email(用户)

文件“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 行,在发送中 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)

文件“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\smtplib.py”,第 867 行,在 sendmail 中 raise 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')

【问题讨论】:

【参考方案1】:

我遇到了同样的错误,当我从新终端运行烧瓶脚本时它解决了。 更改环境变量时,请务必重新启动终端和 IDE。

【讨论】:

【参考方案2】:

先决条件

    您需要一个有效的 gmail 帐户,这意味着您需要知道电子邮件地址和密码 您必须将这些电子邮件地址和密码添加到 Windows 系统变量。 (EMAIL_USER 和 EMAIL_PASSWORD) 你需要打开' 您的 Gmail 帐户安全性中的应用程序访问安全性较低。 你可以谷歌一下。

完成上述所有先决条件后,请先尝试检查是否可以从命令行获取这些变量。

    进入命令提示符,键入 Echo %EMAIL_USER%,预期返回输出是您的电子邮件。如果 %EMAIL_USER% 也返回,那么您错误地配置了上面的第 2 步。

    不要从 VS Code 执行 Python 文件。这个问题也类似于 Pycharm 用户。我认为 VS Code 可能无法以某种方式访问​​操作系统环境(可能我不确定如何配置它。)替代解决方案是通过命令行激活您的虚拟环境,然后通过命令行运行 Python -- 打开命令提示符并转到您的 Python 程序文件夹。 CD 脚本并执行“激活”

2.1 测试你的Python是否可以通过执行Python和import os来获取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

【讨论】:

我试过这个。当我尝试print(os.environ.get("EMAIL_USER")) 时,它起作用了。但是当我尝试运行服务器时,它仍然给出了同样的错误 好的,成功了。关闭我的 cmd 并再次重新启动它。它奏效了。 相同。当我在 VS Code 中运行脚本并在 VS Code 中的 Powershell 中打开 flask shell 会话时,我遇到了同样的错误。当我在 VS Code 之外的 Powershell 中再次执行此操作时,它起作用了。【参考方案3】:

先决条件

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

打开cmd 回显 %EMAIL_USER% 它应该会显示我们在环境变量(test@demo.com)中提供的邮件,如果没有关闭所有打开的cmd提示并重新打开并尝试。 对于回显 %EMAIL_PASS% 也是如此。

注意

如果您使用任何 IDE,例如 sublime text、pycharm、.... 确保 您关闭虚拟环境并重新启动虚拟环境 如果您在 Windows 中找到您的项目路径并使用 (env_name\Scripts\activate.bat) 并重新启动您的应用程序。

同时在您的 gmail 帐户 https://www.google.com/settings/security/lesssecureapps 中启用不太安全的应用访问权限

【讨论】:

【参考方案4】:

你通过 CoreySchafer 的 Flask 课程做到这一点,我也是。所以,我找到了决定。

如果你有 Ubuntu 或 manjaro,你需要编写你的环境变量 不要 .bash_profile 文件, 但是到 .bashrc 然后您需要通过键入. ~/.bashrcsource ~/.bashrc 重新加载.bashrc 文件

如果不起作用,请重新启动系统。它对我有用。

【讨论】:

【参考方案5】:

就我而言,问题在于“VS Code Python 终端”。

除了接受的答案:

尝试在 VS Code 上从“Python 终端”切换到“CMD 终端”对我有用!

点击 VS 代码终端上的 + 按钮并选择 CMD 终端并运行您的程序。

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

以上是关于smtplib.SMTPSenderRefused:(530,b'5.7.0 需要身份验证。在\n5.7.0 https://support.google.2 - gsmtp','noreply@de的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Flask 和 Gmail 发送电子邮件时出错