python imaplib引发套接字错误

时间:2015-07-04 14:34:26

标签: python imaplib

我想通过以下代码检索已发送邮件文件夹中的内容:

ls

conn = imaplib.IMAP4_SSL('imap.exmail.qq.com',993) conn.login(user,pwd) conn.select("Sent Messages") mails = conn.search(None, 'ALL') for num in mails[1][0].split(): t, d = conn.fetch(num, 'RFC822') if t == 'OK': print 'Message %s\n' % (num) msg = email.message_from_string(d[0][1]) subject = email.Header.decode_header(msg['subject'])[0][0] if re.search(month, subject): print subject else: print 'fetch error' 为8时,num介于1到36之间。出现错误:

  

追踪(最近的呼叫最后):
    文件“monthlySummary.py”,第30行,在       t,d = conn.fetch(num,'RFC822')
    文件“/usr/lib/python2.7/imaplib.py”,第455行,在获取中       typ,dat = self._simple_command(name,message_set,message_parts)
    文件“/usr/lib/python2.7/imaplib.py”,第1087行,在_simple_command中       return self._command_complete(name,self._command(name,* args))
    文件“/usr/lib/python2.7/imaplib.py”,第911行,在_command_complete中
      raise self.abort('command:%s =>%s'%(name,val))
  imaplib.abort:command:FETCH =>套接字错误:未终止的行

我尝试重新登录,但仍然出现同样的错误。这个套接字错误是什么意思?我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

从imaplib源代码(here),相关函数是:

def _get_line(self):
    line = self.readline()
    if not line:
        raise self.abort('socket error: EOF')

    # Protocol mandates all lines terminated by CRLF
    if not line.endswith(b'\r\n'):
        raise self.abort('socket error: unterminated line')

    line = line[:-2]
    if __debug__:
        if self.debug >= 4:
            self._mesg('< %r' % line)
        else:
            self._log('< %r' % line)
    return line

函数中的注释表示所有行都必须由CRLF终止,因此它显然会触及不行的行,因此会中止。

您需要确保每一行都以'\r\n'结尾,因此为了做到这一点,您可以在处理之前简单地将此字符串添加到每行(如果尚未存在)。这将确保不会引发程序中止的错误。