解析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;
}
}
}
结果以:
开头Delivered-To:
答案 0 :(得分:2)
对不起朋友 - 你在看着我实时学习;-) parser.MboxMarker是第一个" From" line并且它不是消息对象属性的一部分,因为它是Mbox格式的一个方面,而不是消息。所以考虑到这一点 - 您可以捕获该行并在message.WriteTo()函数之前将其插入到内存中:
var topLine = parser.MboxMarker;
MemoryStream mStream =
new MemoryStream(ASCIIEncoding.Default.GetBytes(topLine));
mStream.WriteTo(exportStream);
mStream.Dispose();