从 Gmail 向我自己发送电子邮件时出现超时错误:[WinError 10060]

问题描述 投票:0回答:1

我目前正在按照教程尝试使用 smtplib 从 Gmail 发送电子邮件。我不断收到错误:

TimeoutError: [WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立的连接失败

我担心这可能与 Gmail 更新其安全性有关,以防止人们在 Google 帐户上使用应用程序密码。

非常感谢任何帮助。

这是我遵循的代码,密码是使用 Gmail 上的应用程序密码功能生成的:

import smtplib 
from email.mime.text import MIMEText

password = "XXXXXXXXX"
subject = "Email Subject"
body = "This is the body of the text message"
sender = "[email protected]"
recipients = sender
def send_email(subject, body, sender, recipients, password):
    msg = MIMEText(body)
    msg\["subject"\] = subject
    msg\["From"\] = sender
    msg\["To"\] = ",".join(recipients)

    with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp_server:
        smtp_server.login(sender, password)
        smtp_server.sendmail(sender, recipients,msg.as_string())
    print("Message Sent!")

send_email(subject, body, sender, recipients, password)

如上所述,每次我尝试运行它时,都会收到错误:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

email gmail smtplib timeouterror
1个回答
0
投票

这不一定是由于安全设置造成的。 我只能使用应用程序密码登录我的 Gmail 帐户。

错误消息表明您可能遇到网络问题。 因为它没有收到服务器错误响应。即E

535,b'5.7.8 用户名和密码不被接受。欲了解更多信息,请访问 5.7.8 https://support.google.com/mail/?p=BadCredentials 41be03b00d2f7-7274907454esm1305271a12.61 - gsmtp

或者451连接超时。 https://support.google.com/a/answer/3726730?hl=en&sjid=635845508349629735-NC#:~:text=error%20messages.-,451,-4.4.2

我建议您尝试在 python 环境中使用终端进行测试。

例如,

使用openssl:

openssl s_client -ign_eof -connect smtp.gmail.com:465
...
220 smtp.gmail.com 

使用远程登录:

telnet smtp.gmail.com 465
...
Connected to smtp.gmail.com

这应该显示您的客户端是否能够与服务器建立连接。

根据 Google 文档,安全性较低的应用程序的弃用日期为 2024 年 9 月。 https://support.google.com/accounts/answer/6010255?hl=en

尽管您也可以领先一步并切换到 OAuth 身份验证。

https://developers.google.com/gmail/imap/xoauth2-protocol#smtp_protocol_exchange

这需要首先生成访问令牌。为此,您应该能够使用 python 客户端库,Google 建议您也熟悉该协议。如果您已经在创建用户令牌,您不妨切换到使用 gmail api,因为您已经完成了一半,这将完全放弃 SMTP。

使用OAuth 2.0访问Google API https://developers.google.com/identity/protocols/oauth2

Gmail API Python 快速入门 https://developers.google.com/gmail/api/quickstart/python

如果您确实遇到网络问题,并且您打算使用带有访问令牌的 SMTP,则仍然需要解决该问题。网上有大量关于解决网络问题的资源。

您可以从上面的测试开始,看看是否仍然出现超时。然后检查端口是否对您的客户端开放,并检查防火墙设置并执行跟踪路由。

关于这方面的一些额外参考。

https://linux.die.net/man/8/traceroute https://www.ionos.com/digitalguide/server/security/checking-open-ports/

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.