2010-01-12 1 views
3

IMAP 사서함을 모니터링하고 모든 새로운 들어오는 메시지를 "보관함"폴더에 자동으로 복사하는 프로그램을 작성하려고합니다. IDLE 명령을 구현하는 imaplib2를 사용하고 있습니다. 여기 내 기본 프로그램이 있습니다 :마지막으로 python imaplib2로 확인한 이래로 imap 메일함에 추가 된 새 메시지를 찾으십니까?

M = imaplib2.IMAP4("mail.me.com") 
M.login(username,password) 
lst = M.list() 
assert lst[0]=='OK' 
for mbx in lst[1]: 
    print "Mailboxes:",mbx 

def process(m): 
    print "m=",m 
    res = M.recent() 
    print res 


M.select('INBOX') 
M.examine(mailbox='INBOX',callback=process) 
while True: 
    print "Calling idle..." 
    M.idle() 
    print "back from idle" 
M.close() 
M.logout() 

그것은 제대로 사서함을 인쇄하고 첫 번째 변화가 사서함에 발생했을 때 처리()를 실행합니다. 그러나 최근()의 응답은 나에게 의미가 없으며, 첫 번째 메시지 후에 다른 알림을 얻지 못합니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

답변

1

예 및 참조 번호는 python-imap-idle-with-imaplib2입니다. 모듈에 스레딩이 포함되어 있으므로 이벤트 동기화에주의해야합니다.

예는 이벤트와 동기화 제시하고, 독자에게 메일 처리를 잎 :

# The method that gets called when a new email arrives. 
# Replace it with something better. 
def dosync(self): 
    print "Got an event!" 

질문에서 힌트를 촬영 "더 나은 뭔가"가 될 수 있습니다

# Replaced with something better. 
def dosync(self): 
    print "Got an event!" 
    res = self.M.recent() 
    print res 
+0

감사합니다. 그러나 코드는 메시지가 반환 될 때마다 경고합니다. 내가 그걸로 무언가를 할 수 있도록 어떻게 메시지의 UID를 얻습니까? – vy32

+0

시도해 볼 수있는 기능이 추가되었습니다. – gimel

+0

감사합니다. 지금 앱을 만들거야! – vy32

1

I 최근()이 다소 모호하다는 것을 알았습니다 (IMAP 모호함, imaplib2가 아닙니다). 유휴 전후의 메시지 번호 목록을 유지하는 것이 좋을 것 같습니다. 차이점은 새로운 메시지입니다.

그런 다음 fetch (메시지, "UID")를 사용하여 메시지 uid를 가져옵니다.

+0

예. recent()이 나를 위해 일하지 않게되었습니다. 또한 imaplib2()에 문제가있었습니다. 몇 시간 동안 실행 한 후에 멈추었습니다. 진행 방법을 모르겠다 ... 작동하는 코드가 있습니까? – vy32

관련 문제