2014-09-15 1 views
0

У меня есть файлы, которые находятся в формате MIME. Мне нужно сохранить вложения в этих файлах. Электронная почта не участвует. Я могу найти множество примеров того, как добавлять вложения в электронные письма или файлы MIME, но очень мало о том, как их получить. Я посмотрел несколько парсеров MIME, таких как LimiLabs, и один из SASA. Но они не показывают образцы для того, что я ищу. И я слишком много новичок, чтобы понять их из какой-то небольшой документации. Итак, возможно ли это? Нужно ли использовать сторонние элементы или это можно сделать только с .NET?Нужна помощь/советы о том, как получить вложения из файла MIME с помощью C#

MIME-Version: 1.0 
Content-Type: multipart/related;boundary="IGi2rPe3RHug37'6b21FU)yg.3tkE/l5r0e-l+ZXD8qh,-P:" 

--IGi2rPe3RHug37'6b21FU)yg.3tkE/l5r0e-l+ZXD8qh,-P: 
Content-type: text/xml; charset="UTF-8" 
Content-id: ACCOUNT 

<?xml version="1.0" encoding="utf-8"?> 
<ACCOUNT> 
    <CustId> 
     <CustPermId>ivan</CustPermId> 
     <CustLoginId>smaher</CustLoginId> 
    </CustId> 
</ACCOUNT> 

--IGi2rPe3RHug37'6b21FU)yg.3tkE/l5r0e-l+ZXD8qh,-P: 
Content-type: image/jpeg 
Content-id: CLOCK.JPG 
Content-description: Notice of Cancellation 


[Base64 Encoded Data Here] 
--IGi2rPe3RHug37'6b21FU)yg.3tkE/l5r0e-l+ZXD8qh,-P:-- 
+0

У вас есть шанс сделать поиск в Интернете по этому вопросу?? Есть много примеров на самом деле – MethodMan

+0

У меня действительно есть. Последние 2 дня! Либо я сосать в поиске, либо просто не знаю достаточно, чтобы узнать, что я ищу. Я также должен добавить, что эти MIME-сообщения будут содержать в себе несколько вложений. – JimDel

+0

как насчет выполнения поиска в Google на этом 'C# get attacments from mime' – MethodMan

ответ

1

Я не в курсе какой-либо встроенный MIME анализаторах в .NET Framework, вы должны работать либо с третьей стороной компонентами или использовать CDOSYS (Microsoft CDO для Windows 2000). Это последний компонент COM, поставляемый с любой версией Windows, более поздней, чем Windows 2000. Это старая вещь, и поэтому полагаться на нее не совсем точно, но она доступна сегодня, и она работает.

Чтобы использовать CDOSYS, просто добавить ссылку COM в эту библиотеку и ADODB и использовать следующий код для загрузки и разбора по электронной почте:

CDO.Message msg = new CDO.Message(); 

// load MIME into CDO 
using (FileStream stream = new FileStream(emailFileSpec, FileMode.Open)) 
{ 
    // read file into a byte stream 
    byte[] emailData = new byte[stream.Length]; 
    stream.Read(emailData, 0, (int)stream.Length); 

    // load byte stream data into an ADODB stream for CDO 
    ADODB.Stream stm = new ADODB.Stream(); 
    stm.Open(
     System.Reflection.Missing.Value, 
     ADODB.ConnectModeEnum.adModeUnknown, 
     ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, 
     null, null); 
    stm.Type = ADODB.StreamTypeEnum.adTypeBinary; 
    stm.Write(emailData); 
    stm.Flush(); 
    stm.SetEOS(); 

    // attach data source to the CDO object 
    msg.DataSource.OpenObject(stm, "_Stream"); 
    stm.Close(); 
} 

Это просто пример, код можно упростить с File.ReadAllBytes() ,

Как только вы загрузите электронную почту, вы можете получить доступ к вложениям через свойство AttachmentIMessage interface (т. Е. CDO.Message). Каждое вложение является объектом, реализующим интерфейс IBodyPart. Используйте метод GetDecodedContentStream() для загрузки декодированного содержимого в ADODB.Stream, который вы можете прочитать в массив байтов .NET. Пример:

// get decoded data into an ADODB stream 
ADODB.Stream stm = part.GetDecodedContentStream(); 

// cast to COM IStream and load into byte array 
IStream comStream = (IStream)stm; 
byte[] attachmentData = new byte[stm.Size]; 
comStream.Read(attachmentData, stm.Size, IntPtr.Zero); 

HTH.

+0

Спасибо за ваш ответ. Я попал в автомобильную аварию, поэтому через несколько дней я смогу попробовать это. Но я не хотел, чтобы вы думали, что я игнорирую это. – JimDel

+0

@ JimDel: Я надеюсь, что это не что-то серьезное - не нужно торопиться здесь. – PeterK

+0

Спасибо! Это и немного больше исследований по этим направлениям меня устроили. – JimDel