2010-02-07 2 views
6

헤더 또는 다른 매개 변수를 전달하지 않고 전자 메일의 본문 텍스트 만 검색하는 Python 프로그램을 만들려고합니다. 나는 이것에 대해 어떻게 가야할지 모르겠다.파이썬 : 헤더가없는 POP3 메시지 텍스트 만 검색

목표는 메시지 텍스트를 통해 프로그램에 기본 명령을 보낼 수있게하는 것입니다.

는 내가 지금 가지고있는 것은 이것이다 :

"인쇄 J는"이 헤더를 포함한 전체 메시지를 출력 실행되는 경우를 제외하고, 모든 괜찮
import poplib 

host = "pop.gmail.com" 
mail = poplib.POP3_SSL(host) 
print mail.getwelcome() 
print mail.user("user") 
print mail.pass_("pass") 
print mail.stat() 
print mail.list() 
print "" 

if mail.stat()[1] > 0: 
    print "You have new mail." 
else: 
    print "No new mail." 

print "" 

numMessages = len(mail.list()[1]) 
for i in range(numMessages): 
    for j in mail.retr(i+1)[1]: 
     print j 

mail.quit() 
input("Press any key to continue.") 

. 난 그냥 추가 쓰레기없이 본문을 추출하고 싶다.

아무도 도와 줄 수 있습니까? 감사!

+1

WOW (그들은 줄의 끝에서 # new statement 표시되어 있습니다)! 파이썬으로 이메일을 다운로드하는 것이 전부입니까? 몇 달 동안 C#에서이 작업을하려고했습니다! 그리고 제 3 자 구성 요소 중 하나가 C#에서 작동하지 않습니다! ........ 파이썬을 모르지만 어딘가에서 같은 문제가 발생하는 것을 기억합니다. 지금 웹 사이트를 찾고 있는데 여전히 찾을 수 있다면 , 아픈 게시물 여기에 당신을 위해 솔루션을 ... 만약 그들이 해결책을 찾았습니다 –

+0

파이썬은 모든 것을 사소한 작업처럼 보이게합니다;) – Ospho

답변

2

email module을 사용하여 이메일을 구문 분석 할 수 있습니다. 헤더 정보의 끝에 모든 라인의 목록의 첫 번째 빈 오프라인

 response, lines, bytes = pop.retr(m) 

     # remove trailing blank lines from message 
     while lines[-1]=="": 
      del lines[-1] 

     try: 
      endOfHeader = lines.index('') 
      header = lines[:endOfHeader] 
      body = lines[endOfHeader+1:] 
     except ValueError: 
      header = lines 
      body = [] 

이 키 :

+0

고마워요! 이 모듈은 완벽합니다. – mplewis

3

이 내 자신의 POP3 리더의 코드의 조각이다. 그런 다음 메시지 본문의 끝에 슬라이스를 나열하십시오.

+0

도움을 주셔서 감사합니다! 나는 조금 문제가있다. pop.retr (m)에서 m은 무엇을 나타 냅니까? 그것은 오류를 던지고있어 내가 거기에 무엇을 넣을 지, 또는이 루틴이 특정 하위에 있어야 할 필요가 있는지 모른다. – mplewis

+0

'pop.retr (m)'은 코드에서'mail.retr (i + 1)'과 유사합니다. - m은 메시지 번호이고 정수입니다. [1] 번째 요소를 가져 오는 동안 retr에 의해 반환 된 튜플을 어떻게 풀어 내는지 보자. 코드에서 빈 문자열을 누를 때까지 줄을 반복하거나 줄 바꿈을 실행할 때까지 반복합니다. 나머지는 시체입니다. – PaulMcG

5

나는 헤더 정보를 생략 get_payload() 방법으로 전자 메일 메시지의 본문을 얻기 위해 이메일을 모듈을 사용할 수 있습니다.

내가 코드에 몇 줄을 추가

import poplib 
import email # new statement 

host = "pop.gmail.com" 
mail = poplib.POP3_SSL(host) 
print mail.getwelcome() 
print mail.user("user") 
print mail.pass_("pass") 
print mail.stat() 
print mail.list() 
print "" 

if mail.stat()[1] > 0: 
    print "You have new mail." 
else: 
    print "No new mail." 

print "" 

numMessages = len(mail.list()[1]) 
for i in range(numMessages): 
    for j in mail.retr(i+1)[1]: 
     #print j 
     msg = email.message_from_string(j) # new statement 
     print(msg.get_payload()) # new statement 

mail.quit() 
input("Press any key to continue.") 
+0

라인을 사용하려고 할 때 'TypeError : initial_value는 str 또는 None, 바이트가 아님'오류가 발생합니다. msg = email.message_from_string (j) –

+0

@Tintinabulator Zea - ** Python3 **을 사용하고 있기 때문에 발생합니다. 'msg = email.message_from_string (j)'대신'msg = email.message_from_bytes (j)'를 사용하십시오. [Python Email Parsing Issue] (https://stackoverflow.com/questions/19508393/python-email-parsing-issue/19508543)를 참조하십시오. –