Как я могу разобрать файл winmail.dat?
Простой вопрос У меня есть приложение C#, которое обращается к серверу IMAP с помощью библиотеки AE.Net.Mail для получения сообщений и вложенных файлов. Иногда, когда сообщение отправляется из Outlook, вложения содержатся в файле с именем winmail.dat. Это файл в формате TNEF.
Есть ли в моем приложении библиотека или другой способ "распаковать" эти файлы, чтобы я мог получить вложения?
5 ответов
Я нашел этот инструмент, которым можно управлять из командной строки для извлечения Attacheemnts, из файла TNEF, но я действительно предпочел бы библиотеку, которая будет работать "в процессе".
У меня возникла та же проблема, и в итоге я создал целую библиотеку электронной почты для.NET под названием OpaqueMail.
Он поддерживает синтаксический анализ файлов в формате TNEF (например, Winmail.dat) через класс TnefEncoding.
// Instantiate a TNEF Encoding object to process the byte array "tnefEncoddedBytes".
TnefEncoding tnefEncoding = new TnefEncoding(tnefEncodedBytes);
// Loop through the TNEF-encoded attachments, outputting their names, content types, and sizes.
foreach (MimePart mimePart in tnefEncoding.MimeAttachments)
{
Console.WriteLine("MIME Part Name: " + mimePart.Name);
Console.WriteLine("MIME Part Content Type: " + mimePart.ContentType);
Console.WriteLine("MIME Part Size: " + mimePart.BodyBytes.Length);
}
Я только недавно реализовал поддержку TNEF в MimeKit, который основан на Microsoft Exchange TNEF API, таким образом предоставляя полный доступ ко всем данным, содержащимся в нем.
Если это для платформы Linux, вы можете использовать инструмент tnef
Использование для получения тела из файла winmail.dat: tnef -w --save-body winmail.dat Использование для извлечения только вложений из файла winmail.dat: tnef winmail.dat
Tnef извлекает Body/atatchments в наш текущий каталог, в котором мы запускаем этот инструмент. Или мы могли бы указать -C DIR, --directory=DIR, чтобы сохранить их по указанному пути
Быстрый поиск приводит к этому: читатель потока TNEF Yerase
У проекта есть исходный код, вы можете либо воспроизвести его в C#, либо сделать небольшую оболочку C# (или лучше C++/CLI) для его использования.