2016-06-01 6 views
0

Ich habe eine MIME-Datei (keine E-Mail), die eine mehrteilige Körper hat. Einer der Teile ist XML, der andere ist Application \ PDF. Wenn Sie versuchen, die PDF-Datei zu speichern, wird sie nicht geöffnet. Ich mache es wahrscheinlich einfach nicht richtig (wie eine Datei speichert, aber Adobe sagt, dass die Datei beim Öffnen beschädigt ist).Problem beim Speichern PDF mit MIMEKIT

Ich benutze den folgenden Code: (HINWEIS: In diesem Snippet lade ich einfach die Informationen aus der Datei und speichere sie dann in einer Datenbank. Ich extrahiere später die Daten aus der Datenbank und erstelle die Datei. Ich weiß es ist die nicht zu/von der DB speichern, die das Problem ist, wie gründlich getestet wurde. es ist in diesem Verfahren ist, dass mein Problem verursacht.)

foreach (var part in _mimeMessage.BodyParts) 
{ 
    if (part is MimePart) 
    { 
     var p = part as MimePart; 

     if (p.ContentId == name) 
     { 
      using (var stream = new System.IO.MemoryStream()) 
      { 
       p.ContentObject.WriteTo(stream); 

       return stream.ToArray(); 
      } 
     } 
    } 
} 

gibt es etwas, das ich dies tue, fehlt?

Antwort

0

Sie speichern den codierten Inhalt. Sie müssen den decodierten Inhalt speichern. Wie folgt:

p.ContentObject.DecodeTo(stream); 
0

Es stellt sich heraus, dass die Dateien, die ich hatte, mit base64 "doppelt codiert" wurden. Ich habe Hilfe von jemandem in den MimeKit Foren bekommen, und hier ist der Code, der für mich funktioniert hat.

  foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>()) 
     { 
      if (attachment.ContentId != name) 
       continue; 

      using (var stream = new System.IO.MemoryStream())//File.Create(@"C:\Client Test Data\Alert Files\" + name)) 
      { 
       using (var filtered = new FilteredStream(stream)) 
       { 
        filtered.Add(DecoderFilter.Create("base64")); 
        attachment.ContentObject.DecodeTo(filtered); 

        return stream.ToArray(); 
       } 
      } 
     }