我想用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的文档,用的端口、协议是否不是标准的。
不知道你这个问题是否已经解决, 如果还没有解决的话:针对该问题,可能是由于连接邮件服务器时响应过慢造成的,可以尝试以下几种方案:
可以尝试在连接邮件服务器时,增加超时时间,例如:
import smtplib
smtpObj = smtplib.SMTP('smtp.example.com', 587, timeout=30) # 增加 timeout 参数
这样可以增加连接时等待响应的时间,避免出现超时错误。
可能是网络原因导致连接邮件服务器不稳定,可以检查一下自己的网络是否正常,或者尝试更换网络或者设备,重新运行代码进行测试。
可能是防火墙或安全软件拦截了连接请求,可以尝试关闭防火墙或安全软件后再次运行程序进行测试。
如果以上方法都无法解决问题,可以考虑尝试其他邮件库或者使用第三方工具进行邮件发送,例如使用邮件客户端或者邮件服务提供商的API等。
希望以上方案能够帮助到您解决问题。