тело письма из разобранного почтового объекта в jython - PullRequest
4 голосов
/ 11 ноября 2008

У меня есть объект.

    fp = open(self.currentEmailPath, "rb")
    p = email.Parser.Parser()
    self._currentEmailParsedInstance= p.parse(fp)
    fp.close()

self.currentEmailParsedInstance, из этого объекта я хочу получить тело письма, только текст без HTML ....

Как мне это сделать?


как то так?

        newmsg=self._currentEmailParsedInstance.get_payload()
        body=newmsg[0].get_content....?

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

        msg=self._currentEmailParsedInstance.get_payload()
        print type(msg)

output = type 'list'


электронная почта

Return-Path:
Получено: от xx.xx.net (пример) от mxx3.xx.net (xxx)
идентификатор 485EF65F08EDX5E12 для xxx@xx.com; Четверг, 23 октября 2008 г. 06:07:51 + 0200
Получено: от xxxxx2 (ccc) через example.net (ccc) (аутентифицировано как xxxx.xxx@example.com) id 48798D4001146189 для example.example@example-example.com; Четверг, 23 октября 2008 г. 06:07:51 + 0200
От: «пример»
Кому:
Тема: FW: пример Дата: четверг, 23 октября 2008 г. 12:07:45 + 0800
Организация: пример Идентификатор сообщения: <001601c934c4 $ xxxx30 $ a9ff460a @ xxx>
MIME-версия: 1.0
Тип контента: составной / смешанный;
граница = "---- = _ NextPart_000_0017_01C93507.F6F64E30"
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: Произведено Microsoft MimeOLE V6.00.2900.3138
Индекс потока: Ack0wLaumqgZo1oXSBuIpUCEg / wfOAABAFEA

Это сообщение из нескольких частей в формате MIME.

------ = _ NextPart_000_0017_01C93507.F6F64E30
Тип контента: составной / альтернативный;
border = "---- = _ NextPart_001_0018_01C93507.F6F64E30"

------ = _ NextPart_001_0018_01C93507.F6F64E30
Тип содержимого: текст / обычный;
кодировка = "US-ASCII"
Content-Transfer-Encoding: 7 бит

От: example.example [mailto: example@example.com]
Отправлено: четверг, 23 октября 2008 г., 11:37
To: xxxx@example.com
Тема: S / I, например (B / L
№4357-0120-810.044)

Пожалуйста, прикрепите файл example.doc),

Спасибо.

B.rgds,

ххх ххх

------ = _ NextPart_001_0018_01C93507.F6F64E30
Тип контента: текст / html;
кодировка = "US-ASCII"
Content-Transfer-Encoding: цитируемый для печати

xmlns: o = 3D "urn: schemas-microsoft-com: office: office" =
xmlns: w = 3D "urn: schemas-microsoft-com: office: word" =
xmlns: st1 = 3D "urn: schemas-microsoft-com: office: smarttags" =
xmlns = 3D "http://www.w3.org/TR/REC-html40">

HTML STUFF до

------ = _ NextPart_001_0018_01C93507.F6F64E30--

------ = _ NextPart_000_0017_01C93507.F6F64E30
Тип контента: приложение / msword;
Name = "xxxx.doc"
Content-Transfer-Encoding: base64
Контент-расположение: вложение;
filename = "xxxx.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7 / CQAGAAAAAAAAAAAAAAABAAAAYAAAAAAAAAAA EAAAYgAAAAEAAAD + //// AAAAAF8AAAD //////////////////////////////////////////// / ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ///////////////////////// s pcEAI2AJBAAA + FK / AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN / AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD // w8AAAAA AAAAAAD // w8AAAAAAAAAAAD // w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQAAABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAA

------ = _ NextPart_000_0017_01C93507.F6F64E30--


Я просто хочу получить:

От: xxxx.xxxx [mailto: xxxx@example.com]
Отправлено: четверг, 23 октября 2008 г., 11:37
To: xxxx@example.com
Тема: S / I для xxxxx (B / L
№4357-0120-810.044)

Просьба найти прикрепленный файл xxxx.doc),

Спасибо.

B.rgds,

ххх ххх


не уверен, что почта искажена! Кажется, если вы получаете HTML-страницу, вы должны сделать это:

        parts=self._currentEmailParsedInstance.get_payload()
        print parts[0].get_content_type()
        ..._multipart/alternative_
        textParts=parts[0].get_payload()
        print textParts[0].get_content_type()
        ..._text/plain_
        body=textParts[0].get_payload()
        print body
        ...get the text without a problem!!

Большое спасибо, Винко.

Так что это похоже на работу с XML, рекурсивный по своей природе.

Ответы [ 2 ]

4 голосов
/ 11 ноября 2008

Это даст вам содержание сообщения

self.currentEmailParsedInstance.get_payload()

Что касается только текстовой части, вам придется раздеть HTML самостоятельно, например, используя BeautifulSoup.

Проверьте эту ссылку для получения дополнительной информации о классе сообщений, возвращаемых анализатором. Если вы хотите получить текстовую часть сообщений, содержащих как HTML, так и текстовую версию самих себя, вы можете указать для get_payload () индекс, чтобы получить нужную часть.

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

>>> parser = email.parser.Parser()
>>> message = parser.parse(open('/home/vinko/jlm.txt','r'))
>>> message.is_multipart()
True
>>> parts = message.get_payload()
>>> len(parts)
2
>>> parts[0].get_content_type()
'text/plain'
>>> parts[1].get_content_type()
'message/rfc822'
>>> parts[0].get_payload()
'Message Text'

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

Удачи.

0 голосов
/ 11 ноября 2008

закончилось этим

        parser = email.parser.Parser()
        self._email = parser.parse(open('/home/vinko/jlm.txt','r'))
        parts=self._email.get_payload()
        check=parts[0].get_content_type()
        if check == "text/plain":
            return parts[0].get_payload()
        elif check == "multipart/alternative":
            part=parts[0].get_payload()
            if part[0].get_content_type() == "text/plain":
                return part[0].get_payload()
            else:
                return "cannot obtain the body of the email"
        else:
            return "cannot obtain the body of the email"
...