1

在解析 Mbox、按条件过滤消息​​并将这些消息写入新流 => 文件后,生成的 Mbox 缺少 FROM 行。你能告诉我我是否犯了代码错误或者 MimeParser 函数中是否存在错误?

示例代码:

    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 = "it@abc.com";

                // 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;
            }
        }
    }

结果开始于:

送到了(送去了:

4

1 回答 1

2

对不起,伙计们 - 你正在看我实时学习 ;-) parser.MboxMarker 是第一个“From”行,它理所当然地不属于消息对象属性,因为它是 Mbox 格式的一个方面,而不是消息。因此,考虑到这一点 - 您可以捕获该行并将其插入到 message.WriteTo() 函数之前的内存中,如下所示:

var topLine = parser.MboxMarker;
MemoryStream mStream =
   new MemoryStream(ASCIIEncoding.Default.GetBytes(topLine));
            mStream.WriteTo(exportStream);
            mStream.Dispose();
于 2015-07-22T18:48:43.923 回答