如何使用smtplib和Python保持SMTP连接打开?

let*_*eto 3 python sockets smtp smtplib

我需要检查SMTP服务器的超时时间,但是我的套接字刚刚关闭。我究竟做错了什么?这是我的测试:

#!/usr/bin/python
import smtplib
import time
import datetime
import socket
socket.setdefaulttimeout(1800)


now = time.time()
server = smtplib.SMTP()
server.set_debuglevel(1)
server.connect('mx.foo.bar','25')
(code,resp) = server.docmd('NOOP')
then = time.time()

print then-now
Run Code Online (Sandbox Code Playgroud)

希望这能奏效。

Eth*_*han 6

好吧,我还没有找到使用smtplib保持smtp连接打开的任何方法。

但是,如果要在不关闭连接的情况下重用连接(是的,打开连接需要花费2-3秒钟的时间),则可以先测试连接。为此,发出NOOP命令并测试状态==250。如果没有,则可以打开连接并发送邮件。而且,您可以选择在完成之前不退出连接。

import smtplib

def create_conn():
    conn = smtplib.SMTP('smtp.gmail.com', 587)
    ...
    return conn

def is_connected(conn):
    try:
        status = conn.noop()[0]
    except:  # smtplib.SMTPServerDisconnected
        status = -1
    return True if status == 250 else False
Run Code Online (Sandbox Code Playgroud)