Python Imaplib2를 마지막으로 확인한 이후 IMAP 사서함에 추가 된 새 메시지를 찾으십니까?
-
20-09-2019 - |
문제
나는 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")를 사용하여 메시지를 얻습니다.
제휴하지 않습니다 StackOverflow