首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mimekit:将过滤后的Mbox结果解析为新的Mbox

Mimekit:将过滤后的Mbox结果解析为新的Mbox
EN

Stack Overflow用户
提问于 2015-07-22 23:41:39
回答 1查看 829关注 0票数 1

在解析Mbox、按条件过滤邮件并将这些邮件写入新的流=>文件后,生成的Mbox缺少FROM行。你能告诉我是我写错了代码还是MimeParser函数中有个bug?

示例代码:

代码语言:javascript
复制
    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;
            }
        }
    }

结果是这样开始的:

发货对象:

EN

回答 1

Stack Overflow用户

发布于 2015-07-23 02:48:44

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

代码语言:javascript
复制
var topLine = parser.MboxMarker;
MemoryStream mStream =
   new MemoryStream(ASCIIEncoding.Default.GetBytes(topLine));
            mStream.WriteTo(exportStream);
            mStream.Dispose();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31567872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档