2016-01-15 2 views
-1

Есть ли способ, которым строка формата MIME будет вложена более 3 десятичных точек при извлечении отдельных частей с сервера IMAP? Например, в разделе 6.4.5, pg56 RFC3501 при описании того, как обрабатывать сообщения rfc822 с сервера, если я хочу получить текстовую версию электронной почты с сервера IMAP, это возможно (и обычно при работе с сообщениями w/rfc822 w/навесное оборудование) для выпускаСколько значений может содержать вставка формата IMAP MIME BODYSTRUCTURE?

tag FETCH uid BODY[4.2.2.1] 

как сообщения rfc822 могут быть глубоко вложены. Таким образом, в этой строке формата есть 3 десятичных точки. Мой вопрос в том, есть ли какая-либо причина, любой тип сообщения MIME может выглядеть так?

tag FETCH uid BODY[1.2.3.4.5] 

Или есть 3 десятичные точки Максимальное количество гнездования возможно? Я еще не нашел это на своих тестах, но прежде чем реализовать это в своем парсере, мне нужно точно знать, что RFC3501 не является конкретным в этом вопросе. Если возможно использование более трех десятичных знаков в строке формата MIME, то как бы выглядела бы БОДИСТРУКТУРА указанного сообщения?

Спасибо за ваше время, я с нетерпением жду вашего ответа.

ответ

0

Я нашел мой ответ, в то время как нет никаких ограничений в rfc204x ни rfc3501, каждая почта сервер, который я пробовал, налагает свои собственные ограничения, поскольку преувеличенное MIME-вложение, похоже, является распространенным способом обойти различные фильтры, такие как спам, блокировка .exe и т. д. «MIME nesting превышает лимит безопасности», похоже, является популярным сообщением, которое возвращается при отправке 15 + уровни десятичных знаков.

+0

Если вы не собираетесь тестировать все возможные почтовые серверы, единственным способом быть надежным является поддержка произвольной глубины. Если вы делаете это самостоятельно и знаете, что ваш почтовый сервер имеет определенный предел, то это действительный подход, но если ваш код будет в дикой природе, это ограничение укусит кого-то в какое-то время – Basic

0

Rfc3501 (который вы связаны) утверждает

BODY[<section>]<<partial>> 

    The text of a particular body section. The section 
    specification is a set of zero or more part specifiers 
    delimited by periods... 

Это кажется довольно явно заявить, что нет верхней границы.

Относительно того, что такое сообщение будет использоваться для, я не знаю

+0

Для меня «нулевые или более спецификаторы деталей» явно не указывают «нет верхних границ». Спасибо за ваш вклад, но я был бы признателен, если бы вы сделали свой ответ немного более ясным/конкретным, указав, что будет выглядеть ТЕЛО, или 4 или более периодов. Мои тестеры и я разобрали огромное количество писем и все же нашли экземпляр этого. За пределами сообщений rfc822 я еще не видел более двух периодов в аргументе раздела. Прямо сейчас, я думаю, что теоретически это возможно, но на практике этого не произойдет. – Pulga

+0

Я не знаю какого-либо формального определения в отношении RFC, поэтому вы можете быть правы, но стоит заметить, что как спецификация XML, так и регулярные выражения используют эту фразу для многих любых «n> = 0». – Basic

+0

Что значит XML & regex? Мой вопрос не имеет к этому никакого отношения. – Pulga

0

Там нет верхнего предела. Самый длинный я видел это маленький ребенок, где Content-Описание сообщения были отредактированы, чтобы содержать номера деталей:

* 1 FETCH (BODYSTRUCTURE (("text" "plain" NIL NIL "Part number 1" "7BIT" 9 1 NIL NIL NIL NIL)("application" "octet-stream" NIL NIL "Part number 2" "BASE64" 14 "qWXKy9s0ny8E1/5/uzNhpg==" ("attachment" ("filename" "foo.bar" "size" "8")) NIL NIL)("message" "rfc822" NIL NIL "Part number 3" "7BIT" 540 ("Thu, 20 May 2004 14:28:50 +0200" "embedded rfc822 message" (("B" NIL "b" "c.d")) NIL NIL (("A" NIL "a" "c.d")) NIL NIL NIL NIL) (("text" "plain" NIL NIL "Part number 3.1" "7BIT" 9 1 NIL ("inline" NIL) ("en" "no" "de") NIL)("application" "octet-stream" NIL NIL "Part number 3.2" "BASE64" 14 NIL NIL NIL NIL) "mixed" ("boundary" "Y") NIL NIL NIL) 24 NIL NIL NIL NIL)(("image" "gif" NIL NIL "Part number 4.1" "BASE64" 0 NIL NIL NIL NIL)("message" "rfc822" NIL NIL "Part number 4.2" "7BIT" 658 ("Thu, 20 May 2004 14:28:50 +0200" "second embedded rfc822 message" (("A" NIL "a" "c.d")) NIL NIL (("B" NIL "b" "c.d")) NIL NIL NIL NIL) (("text" "plain" NIL NIL "Part number 4.2.1" "7BIT" 9 1 NIL NIL NIL NIL)(("text" "plain" NIL NIL "Part number 4.2.2.1" "7BIT" 9 1 NIL NIL "en" NIL)("text" "richtext" NIL NIL "Part number 4.2.2.2" "7BIT" 9 1 NIL NIL NIL NIL) "alternative" ("boundary" "B") NIL NIL NIL) "mixed" ("boundary" "A") NIL NIL NIL) 34 NIL NIL NIL NIL) "mixed" ("boundary" "Z") NIL NIL NIL) "mixed" ("boundary" "X") NIL NIL NIL)) 
+0

Спасибо за ваш ответ arnt, мне было интересно, когда вы будете звонить. Теоретически нет верхнего предела, но похоже, что с этого момента сообщение MIME не может идти глубже, чем 3 десятичные точки? – Pulga

+0

Это, безусловно, возможно. Я могу создать произвольно сложное сообщение MIME, которое настолько глубокое, насколько вы хотите. Вы можете поместить верхний предел в свой код, но 3 ужасно низкий. «Я видел 3 на практике, поэтому я буду использовать 3», это не хорошая парадигма дизайна. «Я видел только 3 на практике, поэтому я буду использовать 16», будет более устойчивым. Почему вы навязываете такой низкий предел? – Max

+0

Ну, я пытаюсь выяснить, как именно разобрать эти сообщения. Пока мой парсер может перейти только к 1.2.3, но да, теперь, когда вы упомянули об этом, хотя фактическое сообщение MIME, представляющее данные (как в реальной, представляющей реальную структуру электронной почты, не является сколь угодно сложным с просто связью открывающая скобка, которая не представляет реальных данных), вероятно, ограничена тремя дефималями - я сделаю ее способной к большему. – Pulga