在解析Mbox、按条件过滤邮件并将这些邮件写入新的流=>文件后,生成的Mbox缺少FROM行。你能告诉我是我写错了代码还是MimeParser函数中有个bug?
示例代码:
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;
}
}
}结果是这样开始的:
发货对象:
发布于 2015-07-23 02:48:44
对不起,伙计们-你们正在看我实时学习;-) parser.MboxMarker是第一个"From“行,它理所当然不是message对象属性的一部分,因为它是Mbox格式的一个方面,而不是消息。记住这一点-您可以捕获该行并在message.WriteTo()函数之前将其插入到内存中,如下所示:
var topLine = parser.MboxMarker;
MemoryStream mStream =
new MemoryStream(ASCIIEncoding.Default.GetBytes(topLine));
mStream.WriteTo(exportStream);
mStream.Dispose();https://stackoverflow.com/questions/31567872
复制相似问题