python smtplib设置超时

时间:2014-02-17 10:41:24

标签: python smtplib

我尝试写小应用程序每天发送电子邮件我的服务器的白色状态,我使用smtplib,蝙蝠有一点问题,我不知道可以设置连接超时!即时尝试whit smtp.setdefaulttimeout(30)bat不工作

def connect(host,user,password)
  try:
    smtp = smtplib.SMTP(host)
        smtp.login(user, password)
        code = smtp.ehlo()[0]
        if not (200 <= code <= 299):
            code = smtp.helo()[0]
 except:
     pass

如何设置此功能的连接超时?感谢

3 个答案:

答案 0 :(得分:6)

从Python 2.6中,您可以在SMTP库中设置超时(official documentation):

class smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

“如果未指定,将使用全局默认超时设置”

如果使用旧版本的Python(&lt; 2.6),则需要设置套接字默认超时:

import socket
socket.setdefaulttimeout(120)

对我来说工作得很好。

答案 1 :(得分:1)

虽然内部smtplib使用socket,但您可以在连接到主机之前使用socket.setdefaulttimeout()

def connect(host,user,password):
    try:
        socket.setdefaulttimeout(2 * 60)
        smtp = smtplib.SMTP(host)
        ...

答案 2 :(得分:0)

Python 3.7有一个额外的超时参数可以使用:

https://docs.python.org/3/library/smtplib.html#smtplib.SMTP

此参数在Python 2中不存在