Извлечение заголовка To: из вложения в электронное письмо - PullRequest
3 голосов
/ 20 августа 2009

Я использую python для открытия электронной почты на сервере (POP3). К каждому электронному письму прикреплено вложенное письмо.

Мне нужно получить адрес «Кому:» из вложения.

Я использую python, чтобы попытаться помочь мне выучить язык, и я еще не так хорош!

Код, который у меня уже есть, это

import poplib, email, mimetypes

    oPop = poplib.POP3( 'xx.xxx.xx.xx' )
    oPop.user( 'abc@xxxxx.xxx' )
    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 ?? 

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

Я знаю, что используя

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

получает мне заголовок 'To:' из основного сообщения, но как мне получить его из вложения?

Я пробовал

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

Но я не уверен, что делать с объектом oAttach. Я попытался превратить его в строку, а затем передать

oMsgAttach = email.message_from_string( oAttach )

Но это ничего не значит. Я немного ошеломлен документами по Python и мне нужна помощь. Заранее спасибо.

1 Ответ

1 голос
/ 20 августа 2009

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

Прежде всего, используйте интерфейс командной строки для Python и функции 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, email или mimetypes, поэтому я не уверен, поможет ли это, но я подумал, что это может указать вам правильное направление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...