Mailkit - 在没有完整 mime 消息的情况下获取 HTML 和文本部分
Mailkit - Get HTML and Text parts without having full mime message
我想从 mime 消息中下载文本和 html 部分并将其存储在数据库中,如果需要,稍后再下载附件。我需要这个,因为我不想将附件存储在我的数据库中以节省磁盘 space 和带宽。稍后将按需下载它们。我不确定我是否可以这样做并且仍然能够使用 MimeKit
中的 MimeParser
我打算这样做:
- 获取消息 body 结构并找到正文和 html 部分
- 使用 ImapFolder.GetStream 下载文本和 html body 部分,并通过保存部分名称和 headers 来存储在数据库中以保留 mime 树结构。不会下载附件
稍后我想在 UI 中显示消息,但我想延迟解析,直到邮件消息需要在 UI 中显示。
这是我目前的进度
var msgSummaries = remoteFolder.Fetch(new int[] { remoteMessage.Index }, MessageSummaryItems.BodyStructure);
var stream = remoteFolder.GetStream(remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier);
//at this point i am saving the stream to the database and later i am trying to convert it to mime entity like that
var parser = new MimeParser(ParserOptions.Default, stream, true);
var mimeEntity = parser.ParseEntity(cancellationToken);
不幸的是,该流不包含 MIME 部分 headers,无法解析,我在 GetStream 方法中看不到请求 headers 的选项
获取 1 (BODY.PEEK[2.MIME] BODY.PEEK[2])
有什么建议吗?
嗯,首先,你试过了吗:
var mimeEntity = remoteFolder.GetBodyPart (remoteMessage.Index, msgSummaries[0].HtmlBody);
或者,如果您真的想使用流:
var headerStream = remoteFolder.GetStream (remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier + ".MIME");
var contentStream = remoteFolder.GetStream (remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier);
var stream = new MemoryStream ();
headerStream.CopyTo (stream);
headerStream.Dispose ();
contentStream.CopyTo (stream);
contentStream.Dispose ();
stream.Position = 0;
//at this point i am saving the stream to the database and later i am trying to convert it to mime entity like that
var parser = new MimeParser(ParserOptions.Default, stream, true);
var mimeEntity = parser.ParseEntity(cancellationToken);
我想从 mime 消息中下载文本和 html 部分并将其存储在数据库中,如果需要,稍后再下载附件。我需要这个,因为我不想将附件存储在我的数据库中以节省磁盘 space 和带宽。稍后将按需下载它们。我不确定我是否可以这样做并且仍然能够使用 MimeKit
中的 MimeParser我打算这样做:
- 获取消息 body 结构并找到正文和 html 部分
- 使用 ImapFolder.GetStream 下载文本和 html body 部分,并通过保存部分名称和 headers 来存储在数据库中以保留 mime 树结构。不会下载附件
稍后我想在 UI 中显示消息,但我想延迟解析,直到邮件消息需要在 UI 中显示。
这是我目前的进度
var msgSummaries = remoteFolder.Fetch(new int[] { remoteMessage.Index }, MessageSummaryItems.BodyStructure);
var stream = remoteFolder.GetStream(remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier);
//at this point i am saving the stream to the database and later i am trying to convert it to mime entity like that
var parser = new MimeParser(ParserOptions.Default, stream, true);
var mimeEntity = parser.ParseEntity(cancellationToken);
不幸的是,该流不包含 MIME 部分 headers,无法解析,我在 GetStream 方法中看不到请求 headers 的选项
获取 1 (BODY.PEEK[2.MIME] BODY.PEEK[2])
有什么建议吗?
嗯,首先,你试过了吗:
var mimeEntity = remoteFolder.GetBodyPart (remoteMessage.Index, msgSummaries[0].HtmlBody);
或者,如果您真的想使用流:
var headerStream = remoteFolder.GetStream (remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier + ".MIME");
var contentStream = remoteFolder.GetStream (remoteMessage.Index, msgSummaries[0].HtmlBody.PartSpecifier);
var stream = new MemoryStream ();
headerStream.CopyTo (stream);
headerStream.Dispose ();
contentStream.CopyTo (stream);
contentStream.Dispose ();
stream.Position = 0;
//at this point i am saving the stream to the database and later i am trying to convert it to mime entity like that
var parser = new MimeParser(ParserOptions.Default, stream, true);
var mimeEntity = parser.ParseEntity(cancellationToken);