2012-04-08 2 views
1

팝업을 켜기 때문에 Gmail에 액세스하려면 '가져 오기 poplib'을 사용하려고했는데 실제로 어떻게 '보낸 사람'주소의 메시지를 확인한 다음 그 메시지를 기반으로 무언가를 실행합니까? 또한 메시지에서 '본문'텍스트를 제거하라는 명령은 무엇입니까?이메일 서버 (gmail)에서 특정 주소를 확인하고 해당 주소를 기반으로 무언가를 실행하려면 어떻게해야합니까?

답변

0

다음은 imaplib을 사용하여 Gmail받은 편지함에있는 각 메일의 제목과 발신자를받는 방법입니다.

import imaplib 
from email.parser import HeaderParser 

conn = imaplib.IMAP4_SSL('imap.gmail.com') 
conn.login('[email protected]', 'password') 

# Select the mail box 
status, messages = conn.select('INBOX') 

if status != "OK": 
    print "Incorrect mail box" 
    exit() 

if int(messages[0]) > 0: 

    for message_number in range(1,int(messages[0])+1): 
     data = conn.fetch(message_number, '(BODY[HEADER])') 
     parser = HeaderParser() 
     msg = parser.parsestr(data[1][0][1]) 
     print "Subject: %s" % msg['subject'] 
     print "From: %s" % msg['from'] 

자세한 정보가 필요할 수 있습니다. official imaplib documentation에서 시작하십시오. documentation에서

+0

완벽하게 작동했습니다. 정말 고맙습니다! Imaplib은 poplib보다 100 배 더 효과가있었습니다. – YamSMit

0

내가 poplib의 메시지를 생각 RFC822 모듈이 서버에서 donloaded 할 수있다.

다음 모듈 문서를 체크 아웃도 ... 이것을 시도하고

>>> rfc822.Message(f) 

에 파일

>>> f = StringIO.StringIO(message) 
>>> import rfc822 

에 넣고 통과했다. 도움이되기를 바랍니다.

>>> import email 
>>> email.message_from_string(...) 

이것은 헤더에 대한 읽기 액세스를 제공하고 또한 신체 내용의 muliple 형식을 지원합니다 :


다른 파이썬 모듈이있다.

0

:

POP3.retr(which) 

Retrieve whole message number which, and set its seen flag. Result is in form (response, ['line', ...], octets). 

그래서, 당신은 메시지의 선이 response[1]에서 목록으로 저장됩니다 response라는 변수로 retr()의 결과를 뒀다 가정. RFC 2822에 의해 우리는 헤더가 메시지 본문과 빈 줄로 구분된다는 것을 알고 있습니다. 메시지를 보낸 사람은 From: 헤더 줄에 있습니다. 따라서 메시지 라인을 반복하고 공백 라인이 생기면 멈추고 From:으로 시작하는 라인을 볼 때 보낸 사람에게 변수를 설정할 수 있습니다.

sender = None 
for line in response[1]: 
    if line.startswith("From: "): 
     sender = line.partition(" ")[2].strip() 
    elif line == "": 
     break 

머리글을 많이 사용하려면 헤더 이름으로 사전에 입력하는 것이 좋습니다. 각 헤더는 여러 번 나타날 수 있으므로 사전의 각 값은 목록이어야합니다. 이 후

headers = {} 
for line in response[1]: 
    if line == "": 
     break 
    line = line.partition(" ") 
    key = line[0].strip().rstrip(":") 
    value = line[2].stirp() 
    headers.setdefault(key, []).append(value) 

당신은 메시지를 보낸 사람을 얻을 수 headers["From"][0]를 사용할 수 있습니다.

매우 복잡하지는 않지만 기본 작업 방식을 보여주고 싶었지만 Python이 대부분의 작업을 수행 할 수 있습니다. 다시 말하지만, 당신의 retr() 결과라고 가정하는 것은 response에 : 당신은 email module에 대한 문서의 메시지 개체에 대한 자세한 내용을 찾을 수 있습니다

import email 

# convert our message back to a string and parse it 
headers = email.parsefromstring("\n".join(response[0]), headersonly=True) 
print headers["From"] # prints the sender 

.

전자 메일 메시지의 줄에는 보낸 사람의 이름과 같은 전자 메일 주소 외에 추가 텍스트가있을 수 있습니다. 정규 표현식을 사용하여 이메일 주소를 추출 할 수 있습니다.

sender = re.find(r".*[ <]([email protected]+)\b", headers["From"]).match(1)