import imaplib, re
import os
import time
import socket
imap_host = 'imap.gmail.com'
mail = imaplib.IMAP4_SSL(imap_host)
mail.login("xxx@example.com", "sddd")
while True:
try:
print 'Connecting to Inbox..'
mail.select("inbox") # connect to inbox.
result, data = mail.uid('search', None, 'UNSEEN')
uid_list = data[0].split()
print len(uid_list), 'Unseen emails.'
if len(uid_list) > 20:
os.system('heroku restart --app xx-xx-203')
time.sleep(30)
except:
print 'Error'
imap_host = 'imap.gmail.com'
mail = imaplib.IMAP4_SSL(imap_host)
mail.login("xxx@example.com", "xxx")
pass
完美无缺,但有时会崩溃:
Restarting processes... done
Connecting to Inbox..
Error
Traceback (most recent call last):
File "gmail_new9.py", line 24, in <module>
mail.login("xxx@ccc.com", "ddddd")
File "/usr/lib/python2.6/imaplib.py", line 498, in login
typ, dat = self._simple_command('LOGIN', user, self._quote(password))
File "/usr/lib/python2.6/imaplib.py", line 1060, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/lib/python2.6/imaplib.py", line 893, in _command_complete
self._check_bye()
File "/usr/lib/python2.6/imaplib.py", line 808, in _check_bye
raise self.abort(bye[-1])
imaplib.abort: [UNAVAILABLE] Temporary System Error
我该如何解决这个问题?
答案 0 :(得分:13)
您的脚本崩溃的原因是调用“except”块中的mail.login()会抛出一个永远不会被捕获的异常。
imaplib的文档说明当你得到imaplib.abort异常时,你应该重试你的命令。
http://docs.python.org/library/imaplib
异常IMAP4.abort IMAP4服务器错误导致此异常 提高。这是IMAP4.error的子类。注意关闭 实例和实例化新实例通常允许从中恢复 这个例外。
另外
>>> help('imaplib')
说同样的话:
“中止”异常意味着应该重置连接,并且 命令重新尝试。
以下是解决问题的方法:
import imaplib, re
import os
import time
import socket
def connect(retries=5, delay=3):
while True:
try:
imap_host = 'imap.gmail.com'
mail = imaplib.IMAP4_SSL(imap_host)
mail.login("xxx@example.com", "sddd")
return mail
except imaplib.IMAP4_SSL.abort:
if retries > 0:
retries -= 1
time.sleep(delay)
else:
raise
mail = connect()
while True:
try:
print 'Connecting to Inbox..'
mail.select("inbox") # connect to inbox.
result, data = mail.uid('search', None, 'UNSEEN')
uid_list = data[0].split()
print len(uid_list), 'Unseen emails.'
if len(uid_list) > 20:
os.system('heroku restart --app xx-xx-203')
time.sleep(30)
except:
print 'Error'
mail = connect()
答案 1 :(得分:1)
imap的端口号在哪里?不是必须的吗?我一直在使用以下代码&amp;有用。检查它是否也适合你 -
import imaplib
gmail = imaplib.IMAP4_SSL('imap.gmail.com',993)
gmail.login('username','password')
gmail.select("inbox")
result, data = gmail.uid('search', None, 'UNSEEN')
您也可以尝试Gmail.py。我尝试使用这个简单的脚本来抽象简单的imap调用。
from gmail import *
gmail = GmailClient()
gmail.login('username','password')
unreadMail = gmail.get_inbox_conversations(is_unread=True)
print unreadMail
注意!! Gmail IMAP的known issues客户端要求“过于频繁”进行身份验证。除此之外,这可能会标记您的帐户要求通过CAPTCHA以继续同步。 Visit here尝试解锁,然后重试。