2016-10-31 2 views
1

Ich habe den folgenden Code:Python - E-Mails lesen?

import poplib 
mailServer = 'pop.gmail.com' 
emailID = '[email protected]' 
emailPass = 'pw' 

myEmailConnection = poplib.POP3_SSL(mailServer) 
print myEmailConnection.getwelcome() 
myEmailConnection.user(emailID) 
myEmailConnection.pass_(emailPass) 
EmailInformation = myEmailConnection.stat() 
print "Number of new emails: %s (%s bytes)" % EmailInformation 
print "\n\n===\nRead messages\n===\n\n" 

numberOfMails = EmailInformation[0] 
for i in range(numberOfMails): 
    for email in myEmailConnection.retr(i+1)[1]: 
     print email 

Der Code funktioniert. Ich kann alle meine Nachrichten lesen. Aber meine Frage ist, wie ich den Körper als String bekommen kann? Ist es möglich, den Fließtext nur als String zu erhalten?

Thx

+2

Ist das, was Sie den Körper der E-Mail drucken? Diese Frage wird auch mit 'python-3.x' markiert, aber in Python geschrieben. 2 –

+1

Betrachten Sie das Python-Modul [email] (https://docs.python.org/2/library/email.html), das enthält Code zum Parsen von E-Mail-Nachrichten. – larsks

+0

Der Parser funktioniert nicht für mich! : / – Moe

Antwort

0

Haftungsausschluss: Ich habe nie poplib selbst verwendet, aber ich habe die offiziellen Dokumente hier lesen: https://docs.python.org/3/library/poplib.html#poplib.POP3.retr

Wenn Sie .retr nennen (i + 1) hier:

for i in range(numberOfMails): 
    for email in myEmailConnection.retr(i+1)[1]: 
     print email 

Sche (i + 1) gibt 3 Werte zurück: (response, ['line', ...], octets). Hier nehmen Sie nur den zweiten Wert (indem Sie .retr(i+1)[1] tun), der eine Liste der Nachrichtenzeilen enthält.

kommen einfach all diese Zeilen eine einzelne String-Nachricht zu erhalten, indem Sie:

for i in range(numberOfMails): 
    for emailLines in myEmailConnection.retr(i+1)[1]: 
     print "\n".join(emailLines) 

Und wenn Sie den tatsächlichen MIME-Content analysieren wollen, können Sie die email lib verwenden, wie von @larsks vorgeschlagen