smtplib.SMTPSenderRefused:(530,b'5.7.0 需要身份验证。了解更多 at\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')

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 设置但没有成功

Returns

smtplib.SMTPSenderRefused smtplib.SMTPSenderRefused: (530, b'5.7.0 需要身份验证。了解更多 at\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 行,在 call 中 return self.wsgi_app(环境,start_response)

文件 "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\flask\app.py",第 2450 行,在 wsgi_app 中 响应 = 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,待定)

文件 "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 再加注(exc_type,exc_value,待定)

文件 "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 returnself.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(消息)

文件 "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(自己)

文件 "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 中 提高 SMTPSenderRefused(代码,响应,from_addr)

smtplib.SMTPSenderRefused: (530, b'5.7.0 需要身份验证。了解更多 at\n5.7.0 https://support.google.com/mail/?p=WantAuthError t20sm2139075wmi.2 - gsmtp', 'noreply@demo.com')

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

先决条件

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

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

  1. 转到命令提示符,键入 Echo %EMAIL_USER%,预期的 return 输出是您的电子邮件。如果 %EMAIL_USER% 也 return 那么你上面的第 2 步配置不正确。

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

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

先决条件

检查控制Panel\System和Security\System->高级设置->环境变量。 点击 New --> Variable name -- 无论你在 init.py 文件中输入什么变量(EMAIL_USER),variable value --- 您要提供的电子邮件,例如: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

你通过 CoreySchafer 的 Flask 课程做到了,我也是。所以,我找到了desicion。

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

重新加载 .bashrc 文件

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

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

除了接受的答案:

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

单击 VS 代码终端和 select CMD 终端上的 + 按钮,然后 运行 您的程序。

1。以邮件域管理员身份启用 'less secure apps' 设置

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

2。以邮箱用户

开启'less secure apps'设置

1.Go 到您的 (Google Account)。 2.On 在左侧导航面板中,单击“安全”。 3.On 在页面底部的安全性较低的应用程序访问面板中,单击打开访问权限。 如果您没有看到此设置,您的管理员可能关闭了 less 安全的应用程序帐户访问(查看上面的说明)。 4.Click 保存按钮。