smtplib.SMTPAuthenticationError:(535,'5.7.3身份验证失败')

Pun*_*ani 4 smtplib python-2.7

我试图使用smtplib在python 2.7中发送邮件.以下代码非常简单:

import smtplib

def main(argv=None):

    sender = 'abc@gmail.com'
    receivers = ['xyz@gmail.com']      

    message = """
    This is a test e-mail message.
    """

    smtpObj = smtplib.SMTP('xyz@gmail.com',25)

    smtpObj.login('abc', 'pwd')       
    smtpObj.sendmail(sender, receivers, message)         
    print "Successfully sent email"


if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)

现在,当我执行下面的代码时,我不断收到此异常:

smtplib.SMTPAuthenticationError:(535,'5.7.3身份验证失败').

好心提醒.

谢谢,

Pun*_*ani 9

实际上,当我尝试在python控制台上执行相同的语句时,我发现密码不正确,这是由于不同的字符编码.

对于所有其他用户,请不要复制粘贴

两个布偶


Maj*_*jte 5

为了完整地回答这个问题,我多次遇到完全相同的错误 - 每次都有不同的原因。这个错误消息一直困扰着我,我已经变成了一个自称是这个错误消息专家的人。这是我遇到的所有问题以及解决方法的列表。

  • 需要在 Google 管理员中启用“不太安全的应用程序”( https://admin.google.com/ac/security/lsa )

  • 即使启用了上述功能,如果您的电子邮件中设置了双因素身份验证,该服务也可能会失败。解决方案是创建一个应用程序特定密码 ( https://myaccount.google.com/u/5/apppasswords ),该密码必须用作 Python 中 smtplib 的密码。

  • 如果您是第一次使用未知 IP 执行此操作。可能有一个秘密验证码启动身份验证。您可能会看到实际上是 534 错误代码而不是 535,但我不能保证这一点。您需要先点击链接以清除验证码 ( https://accounts.google.com/DisplayUnlockCaptcha )。您可能需要等待 10 分钟才能实际注册。所以喝杯咖啡吧。

  • 最后,如果您没有打开正确的端口,您将收到相同的错误消息。我没有在firewalld 中打开端口587。我启用了 smtp 和 smtps 作为服务,但默认情况下它们仅覆盖端口 25 和 465。因此,如果您使用 587,请确保它处于打开状态,例如对于firewalld,sudofirewall-cmd --permanent --add-port=587/tcp 并重新启动firewalld 服务。

  • 最后,如果您没有在服务器上正确设置 SSL,此邮件仍然会失败。在某个时候,我收到了错误消息,在对一些日志进行进一步调查后,我发现它未能进行握手。

  • 最后更新:我不小心将 ehlo() 放在代码中的错误位置,突然开始抛出 535 身份验证错误,即:

    会话 = smtplib.SMTP('smtp.gmail.com', 587)

    session.starttls() session.login(sender_address, sender_pass)

    session.ehlo("yourdomain.com") # <-- 确保它出现在 starttls() 之后而不是之前