2009-08-20 8 views
3

저는 python을 사용하여 서버 (POP3)에서 이메일을 엽니 다. 각 전자 메일에는 전달 된 전자 메일 자체의 첨부 파일이 있습니다.이메일의 첨부 파일에서 To : 헤더 압축

"To :"주소를 첨부 파일에서 가져와야합니다.

저는 파이썬을 사용하여 언어를 배우는 데 도움이되고 있습니다. 아직 좋은 것은 아닙니다!

이미이 코드는 내가 이메일 클래스의 인스턴스로 이메일을 이해이

import poplib, email, mimetypes 

    oPop = poplib.POP3('xx.xxx.xx.xx') 
    oPop.user('[email protected]') 
    oPop.pass_('xxxxxx') 

    (iNumMessages, iTotalSize) = oPop.stat() 

    for thisNum in range(1, iNumMessages + 1): 
      (server_msg, body, octets) = oPop.retr(thisNum) 
      sMail = "\n".join(body) 

      oMsg = email.message_from_string(sMail) 

      # now what ?? 

하지만 나는

내가 알고있는 첨부 파일에 도착하는 방법을 잘 모르겠어요 사용 중

sData = 'To' 
     if sData in oMsg: 
     print sData + "", oMsg[sData] 

주 메시지의 '받는 사람 :'헤더를 가져 오지만 어떻게 첨부 파일에서 가져올 수 있습니까?

나는

for part in oMsg.walk(): 
    oAttach = part.get_payload(1) 

을 시도했다하지만 난 oAttach 객체로 할 모르겠어요. 나는 문자열로 돌려 시도하고

oMsgAttach = email.message_from_string(oAttach) 

에 전달하지만 아무것도하지 않습니다. 나는 파이썬 문서에 약간 압도되어 약간의 도움이 필요하다. 미리 감사드립니다.

+0

어떤 전자 메일 클라이언트가 전자 메일을 보냅니 까? – codeape

+0

@codeape - 잘 모르겠습니다. 이메일은 야후와 핫메일에서 왔으며 첨부 파일은 사람들이 구독하는 메일 링리스트에서 보낸 원래 이메일이며 야후와 핫메일에 불만을 토로합니다. 이것은 억제 목록을 자동화하려는 시도입니다 – 32423hjh32423

+0

해결책은 무엇입니까? 이것은 대답으로 결코 업데이트되지 않았습니다. –

답변

1

받은 편지함에 이메일을 보내지 않고도이 작업을 수행하기가 어렵습니다 (나는 한 번도 poplib을 사용하지 않았습니다). 모든

첫째, 파이썬 명령 줄 인터페이스와 dir()help() 기능의 사용을 많이합니다 : 조사의 내 작은 비트에서 도움이 될 몇 가지 그런 말로 미루어 보아이 당신에게 무슨 일이 일어날 지에 대해 많이 알 수 있습니다 아웃. help(oAttach), dir(oAttach)print oAttach을 코드에 삽입하여 순환 루프의 진행 상황을 파악할 수 있습니다. 명령 줄 인터페이스에 줄 단위로 입력하는 경우이 경우 더 쉽습니다.

무엇을 내가 라고 생각하면은 각 첨부 파일을 검토하고 그것이 무엇인지 알아내는 것입니다. 기존의 이메일 첨부를 들어, 아마 base64로 인코딩, 그래서 이런 일이 도움이 될 수 있습니다 : 당신은 아마 메시지처럼 보이는 있는지 확인하기 위해 각각의 경우에 oAttach를 확인해야

#!/usr/bin/python 
import poplib, email, mimetypes 

# Do everything you've done in the first code block of your question 
# ... 
# ... 

import base64 
for part in oMsg.walk(): 
    # I've removed the '1' from the argument as I think you always get the 
    # the first entry (in my test, it was the third iteration that did it). 
    # However, I could be wrong... 
    oAttach = part.get_payload() 
    # Decode the base64 encoded attachment 
    oContent = b64decode(oAttach) 
    # then maybe...? 
    oMsgAttach = email.message_from_string(oContent) 

참고. sMail 변수를 얻었 으면 변수를 화면에 인쇄하십시오. 그런 다음 Content-Transfer-Encoding: base64과 같은 것을 찾을 수 있습니다. 그러면 첨부 파일이 어떻게 인코딩되는지 알 수 있습니다.

내가 말했듯이, 나는 poplib, email 또는 mimetypes 모듈을 사용하지 않았기 때문에 도움이 될지 확신 할 수 없지만 올바른 방향으로 가리킬 수 있다고 생각했습니다.

+0

감사합니다. 덕분에 도움이되었습니다. 나는 그것을 지금 분류했다. 나는 내 블로그에 솔루션을 게시하고 곧 다시 여기에 추가 할 것이다. – 32423hjh32423

관련 문제