Django email模块如何判断与SMTP服务器的连接是否已建立?
邮件连接状态检测方法
你使用的mail.get_connection()是Django框架的邮件接口,针对标准SMTP邮件后端,可以通过以下方式检测连接状态:
方法1:直接调用open()(推荐)
Django内置的open()方法本身已经实现了幂等逻辑,会自动判断当前连接是否存活,仅在未连接的状态下才会新建连接,重复调用不会产生额外开销:
connection = mail.get_connection() # 无需提前判断状态,直接调用即可保证连接处于开启状态 connection.open()
方法2:手动检测连接状态
如果需要主动获取当前连接的状态,可以通过判断连接实例的内置属性实现:
connection = mail.get_connection() # 连接开启的判定条件 is_opened = ( connection.connection is not None and getattr(connection.connection, 'sock', None) is not None ) if not is_opened: connection.open()
判定逻辑说明:
connection.connection存储实际的smtplib.SMTP连接实例,连接未开启时为Nonesmtplib.SMTP实例的sock属性存储TCP连接套接字,连接断开后会被自动置为None
以上逻辑适配所有遵循Django邮件后端规范的实现,包括自定义后端。
内容的提问来源于stack exchange,提问作者alis01
相关产品推荐
相关产品推荐

