python - Imaplib 中的 EOF 错误

标签 python eof imaplib

我正在编写一个 python 小程序,它监视我工作场所的电子邮件箱的未读计数,当我在小程序闲置约 10 分钟后尝试使用任何 imaplib 方法时遇到 EOF 错误。一切正常,直到小程序存活超过 10 分钟。

这里是imaplib对象的相关代码。

conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)

def loginIMAP (imapObj):
    # Login to Helpdesk Google Apps Email account using encryption
    imapObj.login(base64.b64decode("usrEncryption"), base64.b64decode("pwdEncrytion"))
    return(getUnread(imapObj))

def closeIMAP (imapObj):
    imapObj.logout()


def getUnread (imapObj):
    # Check connection status OK
    try:   
        uc0 = int(re.search("UNSEEN (\d+)", imapObj.status("INBOX", "(UNSEEN)")[1][0]).group(1))
        uc1 = int(re.search("UNSEEN (\d+)", imapObj.status("A box 1", "(UNSEEN)")[1][0]).group(1))
        uc2 = int(re.search("UNSEEN (\d+)", imapObj.status("A box 2", "(UNSEEN)")[1][0]).group(1))
    except:
        print "Shit's all disconnected n stuff"
        loginIMAP(conn)

    unreadCount = [(uc0-(uc1+uc2)),uc1,uc2]
    if unreadCount[0] < 0:
        unreadCount[0]=0
    return unreadCount

usrEncryptionpwdEncryption 只是我屏蔽了 u/p,所以我们的帮助台登录并不都是公开的。

当我在小程序打开十多分钟后尝试调用 getUnread(conn) 时,我得到以下输出:

    Traceback (most recent call last):
  File "C:\Jamin'sApps\Development\Projects\Check HD Box\checkHDBox.py", line 255, in OnRefresh
    unread = getUnread(conn)
  File "C:\Jamin'sApps\Development\Projects\Check HD Box\checkHDBox.py", line 119, in getUnread
    uc0 = int(re.search("UNSEEN (\d+)", imapObj.status("INBOX", "(UNSEEN)")[1][0]).group(1))
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 710, in status
    typ, dat = self._simple_command(name, mailbox, names)
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 899, in _command_complete
    raise self.abort('command: %s => %s' % (name, val))
imaplib.abort: command: STATUS => socket error: EOF
Traceback (most recent call last):
  File "C:\Jamin'sApps\Development\Projects\Check HD Box\checkHDBox.py", line 255, in OnRefresh
    unread = getUnread(conn)
  File "C:\Jamin'sApps\Development\Projects\Check HD Box\checkHDBox.py", line 119, in getUnread
    uc0 = int(re.search("UNSEEN (\d+)", imapObj.status("INBOX", "(UNSEEN)")[1][0]).group(1))
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 710, in status
    typ, dat = self._simple_command(name, mailbox, names)
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "C:\Jamin'sApps\Development\Python\python2.7.2\lib\imaplib.py", line 859, in _command
    raise self.abort('socket error: %s' % val)
imaplib.abort: socket error: [Errno 10053] An established connection was aborted by the software in your host machine

异常 block 似乎并不能真正解决这个问题,而这正是我真正需要帮助的地方。那么,我该如何保持这种联系?

谢谢。

最佳答案

您需要通过重新初始化类来重新连接,而不仅仅是登录,使用

conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)

一个完整的例子:

while True:
    imap = imaplib.IMAP4_SSL(SERVER)
    r, d = imap.login(ACCOUNT, PASSWORD)
    assert r == 'OK', 'login failed'
    try:
        # do things with imap
    except imap.abort, e:
        continue
    imap.logout()
    break

关于python - Imaplib 中的 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575943/

相关文章:

python - 在 Django 1.9 中更改站点名称

c++ - 即使偏移量超出文件大小,也不会设置 eof 位

python - 避免以明文形式存储密码以通过 Python 进行 IMAP 访问

python - imaplib 错误地将 `=` 和 `3D` 字符添加到电子邮件中的 URL 文本中

python - 在字典列表中添加索引哪个更有效?

python - 使用堆栈反转Python中的单词顺序

python - 如何按特定月份/日期过滤日期数据框?

c - 为什么这个 fscanf() 在使用大文件时会出现段错误?

php EOF 忽略新行

python - 如何在 python 中使用 imaplib 获取电子邮件正文?