如何使用Mailkit/MimeKit IMAP将所有邮件保存为单个.mbox文件
你的代码无法正常生成可用的.mbox文件,核心原因是直接拼接多封邮件的原始内容不符合mbox格式规范。mbox格式要求每封邮件之间必须有特定的分隔标识,且需要对内容中可能混淆成分隔标识的字符做转义,直接拼接的文件无法被mbox解析工具识别。
推荐直接使用MimeKit内置的MboxWriter类实现导出,该类已经封装了所有mbox格式规范的处理逻辑,修正后的代码如下:
using (var fileStream = File.Create(@"C:\temp\results.mbox")) using (var mboxWriter = new MimeKit.IO.MboxWriter(fileStream, MimeKit.IO.MboxFormat.Mboxo)) { foreach (var uid in uids) { var message = client.Inbox.GetMessage(uid); mboxWriter.WriteMessage(message); } }
上述代码会自动处理分隔行生成、内容转义、格式对齐等所有规范要求,不需要你手动处理流拼接的细节。
如果你需要手动实现写入逻辑而不使用封装好的工具类,需要额外完成以下处理:
- 每封邮件写入前,先写入
From开头的分隔行,行内需包含发件人地址和符合asctime格式的邮件接收时间,末尾追加换行符 - 写入邮件内容时,所有以
From开头的行需要前置>做转义,避免被识别为新邮件的分隔标识 - 每封邮件写入完成后追加至少1个空行,和下一封邮件做区隔
内容的提问来源于stack exchange,提问作者AdamH409
相关产品推荐
相关产品推荐

