【问题标题】:python smtplib set timeoutpython smtplib 设置超时
【发布时间】:2014-02-17 10:41:23
【问题描述】:

我尝试编写用于每天发送电子邮件的小型应用程序,我正在使用 smtplib,bat 有小问题,我不知道可以设置连接超时!我尝试使用 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

如何设置这个函数的连接超时?谢谢

【问题讨论】:

    标签: python smtplib


    【解决方案1】:

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

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

    "如果不指定,将使用全局默认超时设置"

    如果您使用旧版本的 Python (

    import socket
    socket.setdefaulttimeout(120)
    

    对我来说工作得很好。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        此参数在 Python 2 中不存在

        【讨论】:

          猜你喜欢
          • 2021-10-30
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2021-10-04
          • 2013-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多