Extracting the To: header from an attachment of an email

Refresh

December 2018

Views

849 time

3

I am using python to open an email on the server (POP3). Each email has an attachment which is a forwarded email itself.

I need to get the "To:" address out of the attachment.

I am using python to try and help me learn the language and I'm not that good yet !

The code I have already is this

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

I understand that I have the email as an instance of the email class but I'm not sure how to get to the attachment

I know that using

  sData = 'To'
       if sData in oMsg:
       print sData + "", oMsg[sData]

gets me the 'To:' header from the main message but how do I get that from the attachment ?

I've tried

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

But I'm not sure what to do with the oAttach object. I tried turning it into a string and then passing it to

oMsgAttach = email.message_from_string( oAttach )

But that does nothing. I'm a little overwhelmed by the python docs and need some help. Thanks in advance.

1 answers

1

Не имея электронную почту в своем почтовом ящике, который является представителем, трудно работать этот счет (я никогда не использовал poplib). Сказав, что некоторые вещи, которые могли бы помочь с моей немного расследования:

Прежде всего, сделать много использования интерфейса командной строки для Пайтона и dir()и help()функцию: они могут рассказать вам много о том, что выходит. Вы всегда можете вставить help(oAttach), dir(oAttach)и print oAttachв вашем коде , чтобы получить представление о том , что происходит , как это петля круглой. Если вы печатаете его в интерфейсе командной строки строку за строкой, это даже проще в этом случае.

То , что я думаю , что вам нужно сделать , это пройти через каждое вложение и выяснить , что это такое. Для обычного вложения электронной почты, это, вероятно , в кодировке base64, так что - то подобное может помочь:

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

Обратите внимание , что вы , вероятно , нужно проверить oAttach в каждом конкретном случае , чтобы проверить , что это выглядит как сообщение. Когда вы получили ваш sMailпеременные, распечатать его на экран. Тогда вы можете искать что - то вроде Content-Transfer-Encoding: base64там, что даст вам ключ к тому, как кодируется вложение.

Как я уже сказал, я не использовал любой из poplib, по электронной почте или Mimetypes модулей, так что я не уверен в том, что поможет, но я думал, что это может направить вас в правильном направлении.