gpt4 book ai didi

python - Gmail 使用特定于应用程序的密码阻止来自 Python 的登录尝试

转载 作者:太空狗 更新时间:2023-10-29 17:50:07 28 4
gpt4 key购买 nike

我正在尝试使用 Python 的 smtplib 从 Google 帐户发送电子邮件,但出现错误,现在我有点不知所措。 Google 响应如下:请通过您的网络浏览器登录,然后重试。如需了解详情,请访问 https://support.google.com/mail/answer/78754

该帐户启用了双因素身份验证,因此我使用应用专用密码进行登录。据我了解,这应该可以在不启用安全性较低的应用程序设置的情况下工作,不是吗?我一直在用另一个帐户做同样的事情,同时测试没有问题,但现在我终于获得了正确帐户的凭据,但它不会接受身份验证。

我知道有一个 Python Gmail API 可以与 OAuth 一起使用,但如果可能的话,我不想包含更多的包并重写太多,而且我真的不想启用“less”安全应用程序”设置。有没有办法在没有任何一个的情况下使它工作?

如果有所不同,这里是我用来发送电子邮件的代码。如前所述,这在另一个帐户上运行良好,所以我不确定它是否真的相关。

def send_mail(to_address, subject, body):
smtp_user = "myaccount@domain.com"
smtp_password = "MyAppPasswordFromGoogle"
server = "smtp.gmail.com"
port = 587

msg = MIMEMultipart("alternative")
msg["Subject"] = subject
msg["From"] = smtp_user
msg["To"] = to_address
msg.attach(MIMEText(body, "html"))
s = smtplib.SMTP(server, port)
s.connect(server, port)
s.ehlo()
s.starttls()
s.ehlo()
s.login(smtp_user, smtp_password)
s.sendmail(smtp_user, to_address, msg.as_string())
s.quit()

编辑:这两个帐户之间有一个有趣的区别:在 https://myaccount.google.com/lesssecureapps 上,我的旧(工作)说“此设置不适用于启用双因素身份验证的帐户”,而新的说“此设置由您的域管理员管理”,即使两者都使用 2FA 并且它也是强制的在这两个领域。所以我想域管理员必须更改一些设置,但我不知道会是哪一个。

最佳答案

我试图完全复制您的案例(使用启用了双因素身份验证的帐户)。创建应用密码后,我在代码中使用了它。

无论如何,我认为您的问题如下:

s = smtplib.SMTP(server, port)
s.connect(server, port)

您执行连接两次。

尝试

s = smtplib.SMTP()
s.connect(server, port)

或者只是这个

s = smtplib.SMTP(server, port)

完整代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


smtp_user = 'myUser@gmail.com'
smtp_password = 'my16charactersAppPassword'
server = 'smtp.gmail.com'
port = 587
msg = MIMEMultipart("alternative")
msg["Subject"] = 'Why,Oh why!'
msg["From"] = smtp_user
msg["To"] = "destinationUser@gmail.com"
msg.attach(MIMEText('\nsent via python', 'plain'))
s = smtplib.SMTP(server, port)
s.ehlo()
s.starttls()
s.login(smtp_user, smtp_password)
s.sendmail(smtp_user, "destinationUser@gmail.com", msg.as_string())
s.quit()

关于python - Gmail 使用特定于应用程序的密码阻止来自 Python 的登录尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46445269/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com