Неправильное расширение файла mime dds. Работаем с MIME

Не так давно мне пришлось немного поработать MIME (Multipurpose Internet Mail Extension) - это стандарт почтовых сообщений, в РуНете (Russian Internet) я не нашел нормального описания спецификации MIME , и посему решил написать небольшую статейку на эту тему. В данной статье вы узнаете об основных особенностях и стандартах MIME , а также научитесь «читать» MIME с использованием синтаксиса языка Visual Basic .NET 2005 .

Кто такой MIME и зачем нам с ним работать?

MIME - Multipurpose Internet Mail Extension - стандарт почтовых сообщений. Почтовое сообщение это не только текст и вложения, которые вы привыкли видеть, само по себе почтовое сообщение состоит из MIME-заголовков , которые содержат всю необходимую информацию о сообщении, в частности данные об отправителе/получателе, тему сообщения, текст сообщения, файлы вложений, информацию о кодировках и методах шифрования, а также полный путь сообщения. Если у вас установлен почтовый клиент The Bat! , то вы легко можете посмотреть на внутренности любого почтового сообщения, для этого выберите любое письмо и нажмите меню Специальное => Исходный текст письма , либо клавишу F9 (см. рис. 1).

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

Спецификация MIME

Стандарт MIME подробно описан в RFC-1341 и является расширяемым стандартом, ниже я описал основные поля MIME .

Версия MIME (MIME-Version)

Поле MIME-Version содержит данные о версии MIME, обычно это версия 1.0.

Синтаксис:

MIME-Version: 1.0

Тип контента почтового сообщения (Content-Type)

Тип содержимого почтового сообщения описывается в поле Content-Type . Существуют 7 основных типов контента: text - текст; application - приложение; image - изображение; video - видео; audio - аудио; multipart - смешанный тип; message - сообщение. Каждый тип может иметь подтип, количество подтипов неограниченно, но тем не менее, каждый подтип должен быть зарегистрирован в организации IANA (Internet Assigned Numbers Authority ).

Синтаксис:

Тип application указывает на то, что сообщение содержит любые данные не являющиеся текстовыми, как правило - это бинарные (двоичные) данные. Тип application может иметь неограниченное количество подтипов определяющих тип данных.

Пример:

Типы video и audio указывают на то, что сообщение содержит видео, либо аудио данные. Подтипами audio могут быть: midi , mpeg , x-wav и т.п., а подтипами video : mpeg , quicktime и т.п.

Пример:

Content-Type: audio/x-wav

Тип multipart указывает на то, что сообщение содержит смешанный тип данных, т.е. одно сообщение может содержать один или несколько из выше описанных типов данных. Тип multipart имеет 4 основных подтипа: mixed , alternative , digest , parallel .

Подтип mixed определяет сообщение, состоящее из нескольких (multi ) частей (part ), разделенных друг от друга границей (boundary ). Граница определяется в параметре boundary в поле Content-Type . Граница представляет собой набор ASCII-символов. Каждая часть сообщения, помимо основных данных, может содержать свои заголовки, определяющие тип контента и информацию об используемой кодировке. Части сообщения разделены друг от друга именем границы, причем имя границы в теле сообщения всегда начинается с символов -- , а последняя граница также дополнительно заканчивается символами -- .

Чтобы вам было более понятно, о чем идет речь, посмотрите на следующий фрагмент MIME:

Как видите, это сообщение имеет тип содержимого multipart с подтипом mixed , здесь указано имя границы - moia granica . Сообщение состоит из двух частей, каждая часть имеет тип text с подтипом plan . Первая часть сообщения содержит текст: «Hello! Is sample my boundary!», а вторая часть сообщения содержит текст: «А это следующая часть сообщения!». Кончено, текстовое сообщение никто делить на части не будет, обычно это делается, если в сообщении присутствуют какие-либо вложения (аттачи).

Обратите также внимание - перед первой границей и после последней может отображаться любой текст, который не будет отображаться в почтовых клиентах (web-клиентах, Outlook, The Bat! и т.п.), эту особенность можно использовать, например, для комментариев.

Подтип alternative идентичен подтипу mixed , однако каждая часть сообщения представляет собой сообщение оптимизированное под возможности почтового клиента. Например, сообщение может состоять из нескольких частей, одна часть будет содержать текстовой контент text/plan , другая - гипертекст text/html , в данном случае, если у клиента почтовая программа не будет поддерживать html, то отобразиться первая часть сообщения (text/plan), в противном случае - вторая (text/html).

Подтип digest идентичен подтипу mixed , однако, каждая часть сообщения имеет более детальные заголовки и может содержать такие поля как: From и Subject , что, в свою очередь, позволяет направлять одно сообщение нескольким адресатам.

Подтип parallel идентичен подтипу mixed и предназначен главным образом для отображения одновременно всех частей сообщения.

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

Тип message главным образом используется в случаях, когда сообщение не может быть передано полностью. Основными подтипами данного типа являются: partial - указывает на то, что сообщение разделено на части, при этом, в параметрах поля Content-Type указывается количество частей (total ), номер части (number ) и идентификатор (id ); external-body - позволяет ссылаться на внешние источники.

Следует также отметить, что поле Content-Type может содержать параметр charset , который содержит информацию об используемой кодировке, это могут быть windows-1251, kio8-r и т.п. В случае если сообщение содержит вложения, то Content-Type также может иметь параметр name , в котором содержится имя файла вложения, например:

Content-Type: application/x-zip-compressed; name="MyFile.zip"

Как вы уже, наверное, заметили, все параметры разделены друг от друга точкой с запятой (;), при этом, каждый параметр может быть написан на отдельной строке, а также, значения параметров может быть заключено в кавычки, хотя это вовсе не обязательно. Это может вызвать некоторые проблемы при написание MIME-ридера (MIME Reader), но тем не менее эту особенность нужно учесть.

Тип кодирования сообщения (Content-Type-Encoding)

Поле Content-Type-Encoding содержит информацию об использованном типе кодирования сообщения. Существует 6 основных типов кодирования: Base64 , Quoted-Printable , 7Bit , 8Bit , Binary , X-Token . Типы кодирования 7Bit , 8Bit и Binary не требуют никакого преобразования, поскольку данные передаются по байтам.

Тип кодирования Base64 - позиционная система счисления с основанием 64, где 64 - наибольшая степень двойки, которая представляется с использованием ASCII-символов. Кодировка Base64 использует символы A-Z, a-z и 0-9, в MIME также используются символы «+», «/» и «=».

Тип кодирования Quoted-Printable представляет собой порядок символов в шестнадцатеричном виде, при этом кодируются только символы ASCII-код которых превышает 122, а остальные символы остаются как есть. Перед закодированными символами ставит знак «=».

Тип кодирования X-Token позволяет пользователю самому задавать правила кодирования.

Пример:

Поля From и To содержат адрес отправителя и получателя, а также могут содержать имя отправителя и наименование компании. Помимо этого, в сообщении может присутствовать поле CC , которое содержит список адресатов, которым будет направлена копия сообщения.

Синтаксис:

Для названия компании также может использоваться отдельное поле Organization .

Пример:

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

Еще одно интересное поле - X-Mailer , которое содержит название почтового клиента, через который было отправлено сообщение.

Дату отправки сообщения можно узнать в поле Date .

Также, сообщение может содержать поле Reply-To , в котором указывается адрес, на который будет направлен ответ.

Поле X-Priority содержит отметку о приоритете письма, как правило, это числовое значение, либо комбинация числового и буквенного значения. Письмо может иметь следующие приоритеты:

2 (High ) - высокий приоритет
3 (Normal ) - нормальный приоритет
4 (Low ) - низкий приоритет

При наличии вложений (аттачей) в сообщении также может присутствовать поле Content-Disposition , которое содержит описание вложения (аттача), в частности имя файла, например:

Content-Disposition: attachment; filename="MyFile.rar"

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

Обратите внимание, все значения полей могут быть также зашифрованы, обычно для шифрования используются типы кодирования Base64 и Quoted-Printable , а также, может быть указана кодировка текста, например: windows-1251 , kio8-r , utf-8 и т.п. Если значение поля зашифровано, то оно записывается в следующем формате:

Кодовая страница - это, собственно, и есть windows-1251 , kio8-r , utf-8 и т.п.
Тип кодирования - представляет первый символ названия типа кодирования, это может быть либо B - Base64 , либо Q - Quoted-Printable .

Значение поля - это закодированное указанным типом кодирования значение поля.

Пример:

Subject: =?windows-1251?Q?=EF=F0=E8=EC=E5=F0_=ED=E0_VB?=

Здесь следует отметить, что в Quoted-Printable преобразуются только русские символы, т.е. символы с кодом более 122, остальные символы записываются как есть, при этом перед каждым закодированным символом ставится знак «=». А в Base64 кодируется весь текст.

Читаем MIME

Переходим к самому интересному - чтению MIME программно. Здесь будут рассмотрены только основы чтения MIME с использованием Visual Basic .NET 2005 .

И так, для начала попробуем написать функции дешифровки текста из Base64 и Quoted-Printable . Начнем с простого и напишем функцию дешифровки Quoted-Printable . Как я уже говорил, Quoted-Printable преобразует некоторые символы в шестнадцатеричный код и перед каждым преобразованным символом ставит знак «=», на этом и будем основываться:

Как видите, ничего сложно в этом нет, данная функция запросто преобразует текст Quoted-Printable в обычный. Перейдем к Base64 . Текст, зашифрованный в Base64 , состоит из последовательности больших и маленьких символов английского алфавита, цифр, а также символов «+», «/» и «=». Для дешифровки Base64 можно использовать следующую функцию:

Данная функция предназначена главным образом для декодирования текстовых данных, чтобы получить бинарные (двоичные) данные достаточно пропустить полученный результат через функцию System.Text.Encoding.GetBytes , либо возвратить Convert.FromBase64String(sResult) .

Для получения значений полей MIME я использую регулярные выражения:

Private Function GetHeaderBySource(ByVal sSource As String, ByVal sHeader As String) As String
Dim myRegex As New Regex("((?*): (?.*))|((?*):s (?.*))", RegexOptions.Multiline)
Dim myMatchCollection As MatchCollection = myRegex.Matches(sSource)
Dim sResult As String = ""
Dim iStrt As Integer, iLngth As Integer
For i As Integer = 0 To (myMatchCollection.Count - 1)
If myMatchCollection(i).Groups("key").Value.Trim.ToLower = sHeader.Trim.ToLower Then
sResult += (myMatchCollection(i).Groups("value").Value.Trim) & vbCrLf
"смотрим, есть ли еще что-нибудь после этой группы
If i < myMatchCollection.Count - 1 Then
iLngth = myMatchCollection(i + 1).Groups("key").Index - iStrt - 1
If iStrt < myMatchCollection(i + 1).Groups("key").Index Then
End If
Else
"получаем все до конца заголовка
iStrt = myMatchCollection(i).Groups("value").Index + myMatchCollection(i).Groups("value").Length + 1
iLngth = sSource.Length - iStrt - 1
If iLngth > 0 Then
sResult += Replace(sSource.Substring(iStrt, iLngth).Trim, vbCrLf & Chr(9), vbCrLf)
End If
End If
End If
Next
If sResult.EndsWith(vbCrLf) Then sResult = Mid(sResult, 1, sResult.Length - vbCrLf.Length)
If sResult.StartsWith(vbCrLf) Then sResult = Mid(sResult, vbCrLf.Length, sResult.Length - (vbCrLf.Length + 1))
Return sResult
End Function

Для получения данных из поля, достаточно указать текст MIME и имя поля, значение которого требуется получить, например:

Это стандартный формат и изменяться он не может, поэтому для получения необходимой информации запросто можно использовать регулярные выражения:

Regex("(^=?(?*)?(?{1})?(?.*)?=$)|(^=?(?*)?(?{1})?(?.*)?=(?s.*)$)")

Используя этот синтаксис можно получить название кодировки (windows-1251 , kio8-r и т.п.) - группа encode , тип кодирования (Q или B ) - группа type , а также значение параметра - группа text . Помимо этого, после зашифрованных данных, также может содержаться любой другой текст - группа othertext . Теперь, получив эти данные можно запросто пропустить их через одну из ранее написанных функций дешифрования и радоваться жизни;-) Хотя нет, рано радоваться, после дешифровки, нужно преобразовать текст в нужную кодовую страницу, для этого можно воспользоваться функцией System.Text.Encoding.GetEncoding .

Сам текст сообщения, либо аттач, идет сразу после заголовков, при этом следует учесть, что границы заголовков определяются наличием в конце последовательности двух символов CRLF . Другими словами, заголовки кончаются сразу после пары символов CRLF :

InStr(sMIME, vbCrLf & vbCrLf)

Все остальное - это текст сообщения, либо тело вложения (аттача).

Там же есть небольшой пример использования его в проектах ASP .NET.

Безусловно, написать универсальный MIME-ридер за пару часов не просто, но для узкого использования, например в своих проектах, это вполне реально.

Главный писатель по вопросам технологий

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

До того, как вы сможете открыть файл MIME, вам необходимо выяснить, к какому виду файла относится расширения файла MIME.

Tip: Incorrect MIME file association errors can be a symptom of other underlying issues within your Windows operating system. These invalid entries can also produce associated symptoms such as slow Windows startups, computer freezes, and other PC performance issues. Therefore, it highly recommended that you scan your Windows registry for invalid file associations and other issues related to a fragmented registry.

Ответ:

Файлы MIME имеют Зашифрованные файлы, который преимущественно ассоциирован с Multi-Purpose Internet Mail Extensions (MIME) File.

Иные типы файлов также могут использовать расширение файла MIME. Если вам известны любые другие форматы файлов, использующие расширение файла MIME, пожалуйста, свяжитесь с нами , чтобы мы смогли соответствующим образом обновить нашу информацию.

Как открыть ваш файл MIME:

Самый быстрый и легкий способ открыть свой файл MIME - это два раза щелкнуть по нему мышью. В данном случае система Windows сама выберет необходимую программу для открытия вашего файла MIME.

В случае, если ваш файл MIME не открывается, весьма вероятно, что на вашем ПК не установлена необходимая прикладная программа для просмотра или редактирования файлов с расширениями MIME.

Если ваш ПК открывает файл MIME, но в неверной программе, вам потребуется изменить настройки ассоциации файлов в вашем реестре Windows. Другими словами, Windows ассоциирует расширения файлов MIME с неверной программой.

Установить необязательные продукты - FileViewPro (Solvusoft) | | | |

MIME Multipurpose Internet Mail Extensions (MIME):

  • mime message/rfc822

MIME Инструмент анализа файлов™

Вы не уверены, какой тип у файла MIME? Хотите получить точную информацию о файле, его создателе и как его можно открыть?

Теперь можно мгновенно получить всю необходимую информацию о файле MIME!

Революционный MIME Инструмент анализа файлов™ сканирует, анализирует и сообщает подробную информацию о файле MIME. Наш алгоритм (ожидается выдача патента) быстро проанализирует файл и через несколько секунд предоставит подробную информацию в наглядном и легко читаемом формате.†

Уже через несколько секунд вы точно узнаете тип вашего файла MIME, приложение, сопоставленное с файлом, имя создавшего файл пользователя, статус защиты файла и другую полезную информацию.

Чтобы начать бесплатный анализ файла, просто перетащите ваш файл MIME внутрь пунктирной линии ниже или нажмите «Просмотреть мой компьютер» и выберите файл. Отчет об анализе файла MIME будет показан внизу, прямо в окне браузера.

Перетащите файл MIME сюда для начала анализа

Просмотреть мой компьютер »

Пожалуйста, также проверьте мой файл на вирусы

Ваш файл анализируется... пожалуйста подождите.

Изначально типы MIME проектировались для возможности передачи данных, отличных от текстовых. Актуально это было для электронной почты. Например, чтобы передать картинку, через её протокол использовался тип MIME, сообщающий, что передаётся, к примеру, файл JPEG.

Развитие технологии и её появление

Типы MIME активно используются для передачи данных в HTTP-протоколе. Говоря простым языком, он описывает дополнительные атрибуты пересылаемого пакета и поддерживает возможность реализовать передачу нескольких файлов, даже вложенных друг в друга в рамках одного сообщения. Для того чтобы сообщить адресату о том, какой тип файла передаётся, и, соответственно, как с ним работать, в заголовке добавляется его MIME-тип. Например, обычный текст маркируется text/plain, а электронные страницы - text/html.

Зачем нужно знать о MIME?

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

Веб-программист пишет код для одной из страниц сайта. Он позволяет выполнить загрузку файла PDF. При этом в коде он указывает MIME для такого типа данных: application/pdf. Браузер, обращаясь к этой странице, читает заголовок и понимает, что это PDF-файл. И в зависимости от настроек либо сразу начинает его скачивать, либо просто откроет для просмотра в окне. Таким образом, разделение контента на типы позволяет клиенту адекватно реагировать на поступающие типы данных соответствующим способом.

Список MIME-типов

Количество разновидностей файлов, перечисленных в стандарте MIME, велико. Для удобства все они разбиты по категориям. Стоит рассмотреть основные из них и описать типы, а также то, как браузер будет на них реагировать.

Категория text

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

  • Html. Язык гипертекстовой разметки. Ни один сайт в Интернете не сможет работать без его использования.
  • Css. Каскадные таблицы стилей. Оформление и взаимодействие объектов на странице осуществляется с помощью таких файлов.
  • Javascript. Увидев этот тип, браузер сразу поймёт, что ему нужно обработать участок кода - скрипт.
  • Plain. Простой обычный текст.
  • Xml. Файлы разметки по технологии XML.

Категория image

Здесь передаются расширения пересылаемых файлов, например таких:

  • jpeg;
  • tiff.

Категория application

Содержит в себе типы, которые можно, так или иначе, запустить, то есть данные каких-то приложений или сервисов. Реакция браузера на некоторые из них может быть запросом на запуск специальной программы или же открытие ее прямо на странице.

  • Json. Удобный формат передачи данных. Сообщает браузеру о том, что ответ будет передан в json.
  • Pdf. В зависимости от настроек браузера данный тип может скачиваться, просматриваться в окне или же использовать стороннюю программу, установленную на компьютере.
  • Zip и gzip. Передача архивных файлов.
  • Ogg. Обозначение для мультимедиа контента.
  • Xhtml+xml. Формат передачи данных XHTML, который дополняет и увеличивает функционал классического HTML, а также привносит эффективность XML в стандарт.

Категория audio

По аналогии с графическими файлами в этой категории передаются в основном расширения:

  • Basic. Стандартный тип звукового файла.
  • аудиофайла.
  • Mpeg. Здесь может передаваться mp3 или mpeg.
  • X-ms-wma или x-ms-wax. Тип данных Windows Media Audio.
  • Webm. Довольно молодой формат видео, разработанный компанией Google. Уже поддерживается многими браузерами и медиаплеерами.

X

Заключение

Список MIME type постоянно расширяется в связи с появлением новых технологий, стандартов и типов файлов. Ознакомиться с текущим перечнем можно в последних обновлениях документов RFC, касающихся типов MIME.

В последнее время многие популярные браузеры подвержены сбоям и багам. Некоторые ошибки решаются в скором времени с выходом апдейтов, другие же придется исправлять самостоятельно. В статье мы расскажем, что делать, если в Firefox или Tor выскакивает ошибка “Видео в поддерживаемом формате и типе MIME не найдено”. Мы опишем причины сбоя, а также все простые варианты исправления этого бага.

Что означает формат MIME

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

Причины ошибки

Сбой возникает при попытке загрузить медиаплеер на сайте, либо открыть другое активное окно с выводом контента. Наиболее вероятные причины – это устаревшие плагины, расширения и кодеки. Подразумеваются элементы, отвечающие за вывод контента, в частности это реализуют кодеки Медиа Плеера от Windows и специальный кодек-плагин – H264, который используется на большинстве сайтов.

Апдейт браузера или кодеков также приводит к тому, что на некоторых сайтах просмотр будет недоступен. Это объясняется использованием на ресурсе устаревшей технологии или ошибкой разработчика, некорректно выполнившего настройку вывода и обработки своего web-плеера.

Наглядный вид ошибки “Видео в формате MIME не найдено”

Проблема может возникнуть даже на популярных сайтах, но если вина в этом на стороне сервера, то ее оперативно устраняют. С ошибкой сталкиваются юзеры, которые используют не только Файерфокс, но и другие браузеры на его движке, например Tor. Пользователи веб-клиентов на базе Гугл Хром с такой ошибкой практически не сталкиваются.

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

Что делать, если поддерживающий формат MIME не найден

Для начала, попробуйте кликнуть правой клавишей на области видео, и в меню выбрать «Открыть видео» . Попробуйте переключиться между форматами HTML5 и Flash, но они есть не везде. Если это не помогло, попробуем другие простые действия. Что нужно сделать:


  • для Виндоус 7 – www.microsoft.com/details.aspx?id=16546 .
  • для Виндоус 10 – www.microsoft.com/mediafeaturepack .

Для успешного воспроизведения видео в Firefox потребуется и штатный Виндовс Медиа Плеер. Очень часто на пиратках он отсутствует. Если с его установкой возникли проблемы - рекомендуется выбрать любой европейский регион и подобрать его часовой пояс, настроив соответствующим образом время ПК.

Лишь в редких случаях стоит попробовать заменить штатный проигрыватель Медиа плеер на альтернативный модуль, к примеру, VLC плеер.

Решаем сбой через диспетчер IIS

Для внесения изменений следуйте следующей инструкции:


Как правило, до этого этапа доходит редко, и проблема решается другими способами. Если в списке вдруг нет “Диспетчера IIS”, тогда выполните следующие шаги:


После этого Диспетчер появится в списке Администрирования.

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

Подведем итоги

Теперь вы знаете, что делать при появлении в Firefox ошибки «Видео в поддерживаемом формате и типе MIME не найдено». Основная причина его появления - обновление технологий работы браузера, воспроизводящих компонентов или же настроенная политика безопасности. В любом из случаев проблема оперативно решается и вряд ли займет много времени. Однако, если нужно срочно получить доступ – просто используйте другой браузер.