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身份验证失败').
好心提醒.
谢谢,
为了完整地回答这个问题,我多次遇到完全相同的错误 - 每次都有不同的原因。这个错误消息一直困扰着我,我已经变成了一个自称是这个错误消息专家的人。这是我遇到的所有问题以及解决方法的列表。
需要在 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() 之后而不是之前
| 归档时间: |
|
| 查看次数: |
18492 次 |
| 最近记录: |