2014-10-16 5 views
2

난은 imaplib 통해 Gmail에 저장 내 이메일에 액세스 할 수 있습니다Gmail에서 IMAP을 통해 파이썬을 사용하여 모든 이메일에 액세스하는 방법은 무엇입니까? 다음과 같이

import imaplib 

mail = imaplib.IMAP4_SSL('imap.gmail.com') 
mail.login(username, password) 
mail.select(mailbox='INBOX', readonly=True) 

_, data = mail.search(None, '(ALL)') 

그러나 data 만 1790 가장 최근의 이메일이 포함되어 있습니다. 내가 메일 번호를 반복 할 때, data 1790 위의 ID에 대한 None은 다음과 같습니다

for i in itertools.count(start=1): 
    _, data = mail.fetch(str(i), "RFC822") 

파이썬 통해 Gmail에 내 모든 이메일에 액세스 할 수?

"in:anywhere after:2014-01-01 before:2014-01-02" 

을하지만 파이썬은 이러한 쿼리를 구문 분석 할 수 없습니다 :

Gmail의 webinterface에서이 같은 범위 쿼리를 검색 할 수 있습니다

_, data = mail.search(None, '(ALL "in:anywhere")') 
File "/usr/local/lib/python3.4/imaplib.py", line 660, in search 
    typ, dat = self._simple_command(name, *criteria) 
File "/usr/local/lib/python3.4/imaplib.py", line 1134, in _simple_command 
    return self._command_complete(name, self._command(name, *args)) 
File "/usr/local/lib/python3.4/imaplib.py", line 965, in _command_complete 
    raise self.error('%s command error: %s %s' % (name, typ, data)) 
imaplib.error: SEARCH command error: BAD [b'Could not parse command'] 

범위 쿼리가 according to the docs on Gmail's IMAP extensions 같은 다소 이론적 작업에서 작동합니다. 그러나 나는 search for a range of dates as in RFC 3501, 나는 그 시간 내에 전송 된 메시지를받을 때

_, data = mail.search(None, '(SINCE "01-Jan-2011" BEFORE "01-Jan-2012")') 
+0

이 그 같이 API를 (https://developers.google.com/gmail/api/) –

+0

시도 :

모든 IMAP 폴더를 가져 목록 기능이 있습니다 사이트 상태, IMAP은 "본격적인"것이어야합니다. 어쩌면 표준 라이브러리의 것보다 다른 imap 클라이언트를 사용해야 할 수도 있습니다. – Bengt

+0

당신은 왜 그것을 부셔 버리지 않습니까? 1700을 모으고 날짜를보고 그 날짜부터 다음 1700 끝까지 수집합니까? 아니면 한 번에 한 달에 한 달 씩 할 수 있습니까? –

답변

1

그것이 나오는 것에 따라 나는 그들을의 대부분을 필터링하기 때문에, 정말, 내 "INBOX"약 1700 이메일보다는 더 이상 없다 Gmail의 '받은 편지함 건너 뛰기'필터 옵션으로 검색은 선택한 사서함에서 검색 만하므로 search(None, 'ALL')은 실제로 모든 메시지를 가져 오지 않습니다. 따라서 모든 Gmail 라벨을 반복해야합니다. IMAP 폴더. 당신이 포기하면

mail.list()