Python Imaplib2를 마지막으로 확인한 이후 IMAP 사서함에 추가 된 새 메시지를 찾으십니까?

StackOverflow https://stackoverflow.com/questions/2047067

문제

나는 IMAP 사서함을 모니터링하고 모든 새로운 메시지를 "아카이브"폴더로 자동 복사하는 프로그램을 작성하려고합니다. 유휴 명령을 구현하는 imaplib2를 사용하고 있습니다. 내 기본 프로그램은 다음과 같습니다.

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()

사서함을 올바르게 인쇄하고 첫 번째 변경이 사서함에 발생하면 프로세스 ()을 실행합니다. 그러나 최근 ()의 응답은 나에게 의미가 없으며 첫 번째 메시지 후에는 다른 알림을받지 못합니다.

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

도움이 되었습니까?

해결책

예제 및 참조를 참조하십시오 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

다른 팁

나는 최근 ()가 약간 모호하다는 것을 알게되고있다 (이것은 imaplib2가 아니라 IMAP 모호함). 유휴 전후에 메시지 번호 목록을 유지하는 것이 더 나은 것 같습니다. 차이는 새로운 메시지입니다.

그런 다음 Fetch (메시지, "uid")를 사용하여 메시지를 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top