TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败,如何解决?(标签-python)

使用python的smtplib库出现连接超时问题

问题概述

我想用python的smtplib库来发送邮件,但是出现了超时问题

代码

# smtplib 用于邮件的发信动作
import smtplib
# email 用于构建邮件内容
from email.mime.text import MIMEText
# 构建邮件头
from email.header import Header
from email.message import EmailMessage
import ssl
from loguru import logger

class EmailSend():
    def __init__(self,sender,receiver,auth_key):
        self.sender = sender
        self.receiver = receiver
        self.auth_key = auth_key

    def send(self,content):
        # 端口号:465 or 587
        port = 465
        host = "smtp.qq.com"
        # 正文
        msg = MIMEText(content, 'plain','utf-8')
        # 邮件主题
        msg['Subject'] = "通知"  # 邮件主题
        msg['From'] = self.sender
        msg['To'] = self.receiver
        logger.info("开始发送邮件...")
        smtp = smtplib.SMTP()  # 建立和SMTP邮件服务器的连接
        smtp.connect(host,port)
        logger.info("连接服务器完成")
        smtp.login(self.sender, self.auth_key)
        logger.info("登录成功")
        smtp.sendmail(self.sender,self.receiver,msg.as_string())
        smtp.quit()
        logger.info("邮件发送完成!")

if __name__ == '__main__':
    # 邮箱授权码
    auth_key = "my_key"
    # 发生者的邮箱
    sender_email = "1234@qq.com"
    # 接收者的邮箱
    receiver_email = ["12345@qq.com"]
    email_s = EmailSend(sender_email, receiver_email, auth_key)
    # 不知道为什么,无法连接上服务器
    email_s.send("这是一个测试")

错误

TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

检查对方主机是否存在,是否网络正常,你可以看看qq的文档,用的端口、协议是否不是标准的。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    针对该问题,可能是由于连接邮件服务器时响应过慢造成的,可以尝试以下几种方案:

    1. 增加连接超时时间

    可以尝试在连接邮件服务器时,增加超时时间,例如:

    import smtplib
    
    smtpObj = smtplib.SMTP('smtp.example.com', 587, timeout=30)  # 增加 timeout 参数
    

    这样可以增加连接时等待响应的时间,避免出现超时错误。

    1. 检查网络是否正常

    可能是网络原因导致连接邮件服务器不稳定,可以检查一下自己的网络是否正常,或者尝试更换网络或者设备,重新运行代码进行测试。

    1. 防火墙或安全软件配置问题

    可能是防火墙或安全软件拦截了连接请求,可以尝试关闭防火墙或安全软件后再次运行程序进行测试。

    1. 尝试其他库或工具

    如果以上方法都无法解决问题,可以考虑尝试其他邮件库或者使用第三方工具进行邮件发送,例如使用邮件客户端或者邮件服务提供商的API等。

    希望以上方案能够帮助到您解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^