2015-07-22 2 views
1

Après avoir analysé une Mbox, filtré le (s) message (s) par une condition et écrit ces messages dans un nouveau flux => fichier, la Mbox résultante manque les lignes FROM. Pouvez-vous me dire si je commets une erreur de code ou s'il y a un bug dans la fonction MimeParser?Mimekit: analyser les résultats de la Mbox vers une nouvelle Mbox

exemple de code:

using System.IO; 
    using MimeKit; 

    namespace mboxScan 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       // Grab local .mbox file 
       var stream = MboxStream(@"C:\temp\user.mbox"); 

       // Filter logic 
       string fromFilter = "[email protected]"; 

       // Load every message from a Unix mbox 
       var parser = new MimeParser(stream, MimeFormat.Mbox); 

       // Create new stream for results 
       var exportStream = new MemoryStream(); 

       while (!parser.IsEndOfStream) 
       { 
        var message = parser.ParseMessage(); 
        if (message.From.ToString().Contains(fromFilter)) 
        { 
         // Write this message to exportStream 
         message.WriteTo(exportStream);  
        }             
       } 

       // ** Save exportStream to new MBOX 
       exportStream.Position = 0; 
       using (var fileStream = File.Create(@"C:\temp\results.mbox")) 
       { 
        exportStream.Seek(0, SeekOrigin.Begin); 
        exportStream.CopyTo(fileStream); 
       } 
      } 

      static Stream MboxStream(string s) 
      { 
       Stream fs = File.OpenRead(s); 
       return fs; 
      } 
     } 
    } 

et les résultats commencent par:

Delivered-To:

+0

Pour clarifier les choses, je manque la première ligne du message, comme on le voit dans la Mbox d'origine, (par exemple): De [email protected]x Mon Jun 16 07:20:00 2014 – user2044384

+0

J'ai trouvé la ligne: 'var topLine = parser.MboxMarker;' – user2044384

Répondre

2

gens Désolé - vous me regarder apprendre en temps réel ;-) analyseur .MboxMarker est cette première ligne "De" et elle ne fait pas légitimement partie des propriétés de l'objet message car c'est un aspect du format Mbox, pas le message. Donc, avec cela à l'esprit - vous pouvez capturer cette ligne et l'insérer dans la mémoire avant que la fonction message.WriteTo() en tant que telle:

var topLine = parser.MboxMarker; 
MemoryStream mStream = 
    new MemoryStream(ASCIIEncoding.Default.GetBytes(topLine)); 
      mStream.WriteTo(exportStream); 
      mStream.Dispose();