python imaplib提升套接字错误

python imaplib提升套接字错误,python,imaplib,Python,Imaplib,我想按以下代码从“已发送邮件”文件夹中检索内容: 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': pri

我想按以下代码从“已发送邮件”文件夹中检索内容:

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'
num
为8时,
num
介于1到36之间。出现了一个错误:

回溯(最近一次呼叫最后一次):
文件“monthlySummary.py”,第30行,在
t、 d=conn.fetch(num,'RFC822')
文件“/usr/lib/python2.7/imaplib.py”,第455行,在fetch中
典型,dat=self.\u简单\u命令(名称、消息集、消息部分)
文件“/usr/lib/python2.7/imaplib.py”,第1087行,在简单命令中
返回self.\u命令\u完成(名称,self.\u命令(名称,*args))
文件“/usr/lib/python2.7/imaplib.py”,第911行,在命令中完成
raise self.abort('命令:%s=>%s'(名称,val))
imaplib.abort:command:FETCH=>socket错误:未终止的行

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


谢谢。

根据imaplib源代码(),相关函数是:

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
def\u获取行(self):
line=self.readline()
如果不是直线:
raise self.abort('套接字错误:EOF')
#协议规定由CRLF终止的所有线路
如果不是line.endswith(b'\r\n'):
raise self.abort('套接字错误:未终止行')
行=行[:-2]
如果调试:
如果self.debug>=4:
自我描述(“<%r%”行)
其他:
self.\u日志(“<%r%”行)
回程线
函数中的注释表示,所有行都必须由CRLF终止,因此它显然碰到了一行未终止的行,因此它将中止


您需要确保每一行都以
'\r\n'
结尾,以便在处理它之前,您只需将此字符串添加到每一行(如果它不在那里)。这将确保程序中止时不会引发此错误。

根据imaplib源代码(),相关函数为:

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
def\u获取行(self):
line=self.readline()
如果不是直线:
raise self.abort('套接字错误:EOF')
#协议规定由CRLF终止的所有线路
如果不是line.endswith(b'\r\n'):
raise self.abort('套接字错误:未终止行')
行=行[:-2]
如果调试:
如果self.debug>=4:
自我描述(“<%r%”行)
其他:
self.\u日志(“<%r%”行)
回程线
函数中的注释表示,所有行都必须由CRLF终止,因此它显然碰到了一行未终止的行,因此它将中止


您需要确保每一行都以
'\r\n'
结尾,以便在处理它之前,您只需将此字符串添加到每一行(如果它不在那里)。这将确保程序中止时不会出现此错误。

对不起,我不明白这行代码在源代码中的意思是什么?你能给我一些提示吗没问题。线路就是这样;从任何文件中读取的行。它被分配给readline方法的结果,readline方法在类中进一步定义,只是对python内置readline方法的调用。请参阅以了解更多详细信息。抱歉,我无法理解源代码中这行的含义?你能给我一些提示吗没问题。线路就是这样;从任何文件中读取的行。它被分配给readline方法的结果,readline方法在类中进一步定义,只是对python内置readline方法的调用。有关更多详细信息,请参阅。