2016-06-13 3 views
0

Я знаю, что, чтобы получить все тело сообщения, это команда:Fetch IMap сообщения тела по телнету

[imap_code] UID FETCH [uid] BODY.PEEK[TEXT] 

Таким образом, я получаю все тело сообщения. Но мне нужно исключить часть вложений. Я хочу, чтобы только сообщение было отправлено отправителем, текстом и/или html.

Есть ли способ?

Это полный сырой HTML почты с приложением

http://pastebin.com/FMEQdLM3

Я хотел бы получить только

<div dir="ltr">This is the message body<div><ul><li>one</li><li>two</li></ul></div></div> 

или простой текст, если нет HTML версия

+0

Пожалуйста, обновите вопрос с помощью примера записи из фактического журнала и фактического вывода, который вы ожидаете – Inian

+0

Хорошо, я привел пример – matiux

+0

У вас все ваши сообщения похожи на этот пример? – Max

ответ

3

сообщения выкладываются в произвольном дереве частей, причем родительские элементы имеют тип multipart/* или message/rfc822, а дети - из других типов. FETCH BODY[...] позволяет произвольно извлекать любую из этих частей.

К сожалению, стандартного макета сообщений нет. Вы можете получить элемент BODYSTRUCTURE, чтобы получить MIME-раскладку сообщения, но очень сложно разобрать глазом.

Это, как говорится, есть несколько общих макетов сообщений, которые доставят вам большую часть пути.

Самый простой - это сообщение только с одним телом, либо text/html, либо text/plain. Просто заберите BODY[TEXT].

Следующий многоформатный, с текстом/html и текстом/равниной. Его структура MIME обычно выглядит следующим образом:

+ multipart/alternative [TEXT] 
|- text/plain    [1] 
\- text/html    [2] 

В этом случае, если вы хотите, чтобы принести BODY[2].

Если сообщение однокорпусные, с вложениями, он будет выглядеть примерно так:

+ multipart/mixed or multipart/related [TEXT] 
|- text/html or text/plain    [1] 
|- image/jpg       [2] 
| ... 
\- image/gif 

В этом случае вы хотите BODY[1].

Последний из них: многоформатный корпус с вложениями. Это будет иметь тенденцию выглядеть примерно так:

+ multipart/mixed or multipart/related [TEXT] 
|-+ multipart/alternative    [1] 
| |- text/plain       [1.1] 
| \- text/html       [1.2] 
|- image/jpeg       [2] 
|- image/gif       [3] 
|... 
\- image/png 

В этом случае, вы, вероятно, хотите BODY[1.2]. Ваше примерное сообщение относится к этому типу.


Кроме того, тела могут быть закодированы в кодировке Quoted-Printable или Base64. К сожалению, базовый IMAP не предоставляет никакого способа для сервера декодировать это для вас. Quoted-Printable может быть в основном прочитан, если сообщение является ascii, но будет иметь много = побегов по всему телу. Если это base64, вы не сможете расшифровать его на глаз. BINARY IMAP extension может помочь в этом, но это не широко развернуто.

+0

[Извините, мои деревья искусства ascii] – Max