2011-03-04 2 views
3

온라인에서 찾은 일부 코드와 나 자신의 수정본을 사용하여 Gmail에서 첨부 파일을 다운로드하려고합니다. 그러나 다음 코드 :imaplib.error : 상태 AUTH에서 FETCH가 부적합합니다.

import email, getpass, imaplib, os, random, time 
import oauth2 as oauth 
import oauth2.clients.imap as imaplib 

MY_EMAIL = '[email protected]' 
MY_TOKEN = "token" 
MY_SECRET = "secret" 

consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token(MY_TOKEN, MY_SECRET) 

url = "https://mail.google.com/mail/b/"+MY_EMAIL+"/imap/" 
m = imaplib.IMAP4_SSL('imap.gmail.com') 

m.authenticate(url, consumer, token) 

m.select('INBOX') 

items = m.select("UNSEEN"); 
items = items[0].split() 

for emailid in items: 
    data = m.fetch(emailid, "(RFC822)") 

반환이 오류 :

imaplib.error: command FETCH illegal in state AUTH

왜 권한이있어 동안 불법 가져 오기 것인가?

답변

3

전화를 선택할 때 오류 확인 기능이 부족합니다. 일반적으로이 내가 사서함에 연결의 첫 번째 부분 구조 것이다 방법은 다음과 같습니다 본질적으로

# self.conn is an instance of IMAP4 connected to my server. 
status, msgs = self.conn.select('INBOX') 

if status != 'OK': 
    return # could be break, or continue, depending on surrounding code. 

msgs = int(msgs[0]) 

을, 당신이 발생하고있는 문제는 당신이 당신의 상태를 존재하지 않는 사서함을 선택한 것입니다 메시지는 아마 "OK"가 아니어야하며 반복되는 값이 유효하지 않습니다. 선택, 선택 사서함 이름을 기억하십시오. 플래그 ("UNSEEN"으로 시도한 것일 수도 있음)를 기반으로 검색하지 않습니다. 당신이 존재하지 않는 메일 박스를 선택하면 실제로 응답으로이 얻을 :

('NO', ['The requested item could not be found.']) 

하는 경우, for email id in items가 제대로 작동하지 않습니다. 불행히도, 어떤 식 으로든 당신이 겪은 것이 아닙니다. 유효한 사서함을 얻는 방법은 다음과 같습니다.

('OK', ['337']) 

희망이 있습니다. 당신이 실제로 당신이 사용하려는 사서함에 보이지 않는 메시지를 검색하려면

는 의견에 문제를 해결하기 위해 :

응답은 선택의 응답과 유사 할 것입니다
status, msgs = self.conn.select('INBOX') 
# returns ('OK', ['336']) 

status, ids = self.conn.search(None, 'UNSEEN') 
# returns ('OK', ['324 325 326 336']) 

if status == 'OK': 
    ids = map(int, ids[0].split()) 

하지만, 메시지 수에 대한 단일 정수 대신 ID 목록을 얻을 수 있습니다.

+0

흠 내가보고, 감사

다음은이 보여주는 멋진 사진입니다. 약간 관련 : 보이지 않는 이메일을 검색하려면 어떻게해야합니까? m.search ("UNSEEN")도 오류를 제공합니다. – HankSmackHood

+0

@JacobK - 보이지 않는 메시지를 얻으려면 (사서함을 선택한 후) 다음과 같이하십시오 : conn.search (None, 'UNSEEN')'. –

+0

그냥 해결했지만 어쨌든 고마워요 :) – HankSmackHood

관련 문제