2009-08-20 8 views
3

Ich benutze Python, um eine E-Mail auf dem Server (POP3) zu öffnen. Jede E-Mail hat einen Anhang, der selbst eine weitergeleitete E-Mail ist.Extrahieren der An: Header aus einer Anlage einer E-Mail

Ich brauche die "An:" -Adresse aus dem Anhang.

Ich benutze Python, um zu versuchen und mir zu helfen, die Sprache zu lernen, und ich bin noch nicht so gut!

Der Code, den ich schon habe, ist dies

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 ?? 

Ich verstehe, dass ich die E-Mail als eine Instanz der Klasse E-Mail haben, aber ich bin nicht sicher, wie man die Befestigung

ich kennen lernen das mit

bekomme ich den 'To:' Header aus der Hauptnachricht, aber wie bekomme ich das aus dem Anhang?

Ich habe

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

Aber ich bin nicht sicher, was mit dem oAttach Objekt zu tun. Ich habe versucht, es in eine Zeichenfolge und dann übergibt es an

Aber das tut nichts. Ich bin ein wenig überwältigt von den Python-Docs und brauche etwas Hilfe. Danke im Voraus.

+0

Welcher E-Mail-Client sendet die E-Mail? – codeape

+0

@codeape - Ich weiß es nicht. E-Mails kommen von Yahoo und Hotmail und die Anhänge sind die Original-E-Mails von Mailing-Listen, die Menschen abonniert haben, und dann beschwerte sich bei Yahoo und Hotmail über. Dies ist ein Versuch, Unterdrückungslisten zu automatisieren. – 32423hjh32423

+0

Was war Ihre Lösung? Dies wurde nie mit der Antwort aktualisiert. –

Antwort

1

Ohne eine E-Mail in meinem Posteingang, die repräsentativ ist, ist es schwierig, diese durchzuarbeiten (ich habe nie poplib verwendet). Having said that, einige Dinge, die von meinem wenig Untersuchung helfen könnten:

Vor allem viele Verwendung der Befehlszeilenschnittstelle zu Python machen und die dir() und help() Funktionen: Diese können Sie viel darüber erzählen, was kommt aus. Sie können immer help(oAttach), dir(oAttach) und print oAttach in Ihren Code einfügen, um eine Vorstellung davon zu bekommen, was während der Schleife passiert. Wenn Sie es Zeile für Zeile in die Befehlszeile eingeben, ist es in diesem Fall noch einfacher.

Was ich denke, müssen Sie tun, ist durch jeden Anhang zu gehen und herauszufinden, was es ist. Für einen herkömmlichen E-Mail-Anhang, ist es wahrscheinlich Base64 codiert, so etwas wie dies könnte helfen:

#!/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) 

Beachten Sie, dass Sie wahrscheinlich in jedem Fall prüfen oAttach müssen zu überprüfen, dass es wie eine Nachricht aussieht. Wenn Sie Ihre sMail Variable haben, drucken Sie sie auf dem Bildschirm aus. Dann können Sie nach etwas wie Content-Transfer-Encoding: base64 darin suchen, das Ihnen einen Hinweis gibt, wie die Anlage kodiert wird.

Wie gesagt, ich habe keines der Module poplib, email oder mimetypes benutzt, also bin ich mir nicht sicher, ob das hilft, aber ich dachte, es könnte dich in die richtige Richtung weisen.

+0

Danke dafür, es hat geholfen. Ich habe es jetzt aussortiert. Ich poste die Lösung in meinem Blog und füge sie in Kürze wieder hinzu – 32423hjh32423