2011-09-05 4 views
1

Python 및 imaplib 사용 2 개의 imap 서버 (gmail)에 연결하고 해당 날짜의 날짜를 사용하여 전자 메일을 일치 시키려고합니다.다른 이메일의 구문 분석 날짜를 사용하여 imap 검색

2 가지 문제가 있습니다.

  • 헤더를 구문 분석하여 반환 된 날짜는 검색에 직접 사용할 수 없으며 형식이 잘못되었습니다.
  • 헤더를 구문 분석하여 반환 된 날짜와 시간으로 검색하는 데 사용할 imap 검색이 명확하지 않습니다.

나는 올드 메일과 뉴 메일의 imap 연결을 가지고 있습니다.

NewMail.select("[Gmail]/All Mail", readonly=True) 
OldMail.select("[Gmail]/All Mail") 

그냥 임의의 이메일 "6001"

typ, msg = NewMail.fetch('6001', '(BODY[HEADER])') 
parser = HeaderParser() 
pmsg = parser.parsestr(msg[0][1]) 

>>> pmsg['Date'] 
'Tue, 28 Dec 2010 21:56:00 -0700' 

을 선택하지만이처럼 사용할 수있는 권리 편대에없는, :-) 쉬운 방법 기분이 언짢아이

searchfor = '(ON "' + pmsg['Date'] + '")' 
>>> searchfor 
'(ON "Tue, 28 Dec 2010 21:56:00 -0700")' 
OldMail.search(None, searchfor) 

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 620, in search 
    typ, dat = self._simple_command(name, *criteria) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 1060, in _simple_command 
    return self._command_complete(name, self._command(name, *args)) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 895, in _command_complete 
    raise self.error('%s command error: %s %s' % (name, typ, data)) 
error: SEARCH command error: BAD ['Could not parse command'] 

내 목표는 Google 마이 그 레이션 앱을 사용하여 전송이 실패한 후 2 대의 서버간에 일치하는 이메일을 찾는 것입니다. 그런 다음 이전 서버에있는 이메일을 삭제하십시오. 이것을하는 더 좋은 방법을 제안 할 수 있다면 도움이 될 것입니다.

답변

2

날짜 형식이 문제가되는 것처럼 보입니다. 이 경우이에서 :

a = datetime.strptime(pmsg['Date'],"%a, %d %b %Y %H:%M:%S %z") 

당신에게 날짜 시간 객체를 줄 것이다 이것은 당신에게 메시지를 줄 것이다 : 그것은 시간을 무시하기 때문에,

searchfor = '(ON "%s")' %(a.strftime("%d-%b-%Y") 

곰을 염두에 해당 날짜의 모든 메시지를 줄 것이다 및 시간대 정보

다른 방법으로 이메일을보고 "Message-Id :"헤더가 도움이 될지 여부를 확인하는 것이 좋습니다. 실제로는 중복 된 이메일의 경우 각 계정에서 동일해야하기 때문입니다.

관련 문제