从Flask-Mail发送邮件(SMTPSenderRefused 530)

14

Flask邮件应用程序中使用的应用配置(遵循Miguel Grinberg Flask开发书):

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('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')

邮件用户名和密码变量已正确设置并进行了重新检查。在尝试使用以下代码发送邮件时,

from flask.ext.mail import Message
from hello import mail
msg = Message('test subject', sender='same as MAIL_USERNAME', recipients=['check@mail.com'])
msg.body = 'text body'
msg.html = '<b>HTML</b> body'
with app.app_context():
    mail.send(msg)

在发送时,该应用程序一遍又一遍地出现以下错误:

SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 qb10sm6828974pbb.9 - gsmtp', u'configured MAIL_USERNAME')

有没有解决这个错误的方法?

4个回答

8
在调查问题时,我重新检查了Google的SMTP设置。更改了以下内容:
app.config['MAIL_SERVER'] = 'smtp.googlemail.com'

为了

app.config['MAIL_SERVER'] = 'smtp.gmail.com'

起作用了。

同时确保使用完整用户名作为Gmail SMTP用户名,即像上图中显示的example@gmail.com

希望这有所帮助!!!


2
您需要更改您的Google帐户设置。在此页面上,打开“允许不安全的应用程序”选项。
就像该页面所说:
一些应用和设备使用不太安全的登录技术,这会使您的帐户更加容易受到攻击。您可以关闭这些应用的访问权限(我们建议这样做),或者如果您想使用它们但存在风险,则可以打开访问权限。了解更多

2

我也遵循了这本书并遇到了同样的问题,在这里那里挖掘一番之后,我找到了问题的根源。但是,我不确定对于你来说是否也是相同的情况。

app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')

正如您所见,您的flask应用程序通过os.environ.get()获取您的电子邮件凭据,如果您在系统中暂时设置了这些环境变量(在我的情况下是Mac OSX),则在终端会话后它们将消失,因此您需要再次设置它们以供您下次进入终端使用,如下所示:

export MAIL_USERNAME=**YOUR EMAIL**
export PASSWORD=**YOUR PASSWORD**

我因为这种情况得到了这个错误,要永久设置它们,您需要将这些变量包含在.bash_profile文件中,该文件位于您的主目录中。


1
我通过运行 source ~/.bash_profile 使我的工作正常,这会重新加载它。 - ss_millionaire
@ss_millionaire非常感谢,哈哈,这些答案都没对我有用,但是你的评论确实有效! - Sheshank S.
@SheshankS。下次重新加载计算机时,它将无法工作。 - Humoyun Ahmad
@Humoyun 嗯,那我该如何让它始终保持不变呢? - Sheshank S.

1

请执行以下两步以解决问题:

  1. 使用此链接并打开“允许不安全应用程序”- https://myaccount.google.com/lesssecureapps

  2. 使用硬编码的电子邮件和密码值,它可以正常工作。 只需在文件“init.py”中编辑以下部分:

不要使用os.environ.get

app.config['MAIL_USERNAME'] = 'youremail@gmail.com'
app.config['MAIL_PASSWORD'] = 'yourpassword'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接