2010-02-07 7 views
6

Ich versuche, ein Python-Programm, das nur den Nachrichtentext einer E-Mail abrufen, ohne Header oder andere Parameter übergeben. Ich bin mir nicht sicher, wie ich das anstellen soll.Python: Nur POP3-Nachrichtentext abrufen, keine Header

Ziel ist es, grundlegende Befehle per Nachrichtentext an ein Programm senden zu können.

Was ich habe, ist jetzt das:

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.") 

, die alle in Ordnung ist, es sei denn, „print J“ ausgeführt wird es die gesamte Nachricht druckt, einschließlich Header. Ich möchte nur den Text ohne zusätzlichen Müll extrahieren.

Kann jemand helfen? Vielen Dank!

+1

(sie sind mit # new statement am Ende der Linie markiert) WOW! Ist das alles, um E-Mails in Python herunterzuladen? Ich habe versucht, dies in C# seit Monaten zu tun !!!! Und nicht eine der Komponenten von Drittanbietern funktioniert in C#! ........ Ich kenne Python nicht, aber erinnere dich daran, das gleiche Problem irgendwo zu sehen, ich suche jetzt nach der Webseite und ob ich sie noch finden kann , krank post diese Person Lösung hier für Sie ... wenn sie die Lösung gefunden haben –

+0

Python macht alles wie eine triviale Aufgabe scheinen;) – Ospho

Antwort

2

Sie können eMails mit der email module analysieren.

+0

Vielen Dank! Dieses Modul ist perfekt. – mplewis

3

Dies ist ein Codefragment aus meinem eigenen POP3-Leser:

 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 = [] 

Diese Schlüssel aus der ersten leeren Zeile in der Liste aller Linien als das Ende des Headers Infos. Dann listet die Scheibe von dort bis zum Ende für den Nachrichtentext auf.

+0

Danke für die Hilfe! Ich habe allerdings ein paar Probleme. Was repräsentiert m in pop.retr (m)? Es wirft Fehler und ich weiß nicht, was ich dort setzen soll, oder ob diese Routine in einem bestimmten Untersystem liegen muss. – mplewis

+0

'pop.retr (m)' in meinem Code ist analog zu 'mail.retr (i + 1)' in Ihrem Code - m ist die Nachrichtennummer und ist eine ganze Zahl. Sehen Sie, wie ich das von retr zurückgegebene Tupel entpacke, während Sie einfach das [1] te Element nehmen? Streichen Sie in Ihrem Code einfach über die Zeilen, bis Sie eine leere Zeichenfolge oder keine Zeilen mehr erhalten. Der Rest ist der Körper. – PaulMcG

5

würde ich E-Mail Modul verwendet den Körper der E-Mail-Nachricht mit get_payload() Methode zu erhalten, die Header-Informationen überspringt.

ich einige Zeilen Code hinzugefügt

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

Ich bekomme den Fehler 'TypeError: initial_value muss str sein oder None, nicht Bytes' wenn Sie versuchen, Ihre Zeile zu verwenden msg = email.message_from_string (j) –

+0

@Tintinabulator Zea - Dies sollte passieren, weil Sie ** Python3 ** verwenden. Verwenden Sie 'msg = email.message_from_bytes (j)' anstelle von 'msg = email.message_from_string (j)'. Weitere Informationen finden Sie unter [Python-E-Mail-Analyseproblem] (https://stackoverflow.com/questions/19508393/python-email-parsing-issue/19508543). –