smtplib.SMTPSenderRefused:(530,需要b'5.7.0身份验证。有关详细信息,请参见\ n5.7.0 https://support.google.2-gsmtp','noreply@demo.com')

时间:2020-05-04 22:45:21

标签: python flask smtp email-verification

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

回溯(最近通话最近) 调用中的文件“ 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'了解更多信息)

6 个答案:

答案 0 :(得分:2)

先决条件

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

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

  1. 转到命令提示符,键入Echo%EMAIL_USER%,期望的输出结果是您的电子邮件。如果%EMAIL_USER%也返回了,则说明您错误地配置了上面的步骤2。

  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

  1. 尝试重设密码。电子邮件应发送。我现在收到了电子邮件。

您可以尝试的第二件事: 而不是使用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。

  • 打开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

答案 3 :(得分:0)

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

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

重新加载 .bashrc 文件

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

答案 4 :(得分:0)

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

除了接受的答案:

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

点击 VS code 终端上的 + 按钮并选择 CMD 终端并运行您的程序。 enter image description here

答案 5 :(得分:0)

1.以邮件域管理员身份打开“安全性较低的应用”设置

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

2.以邮箱用户身份打开“安全性较低的应用”设置

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