Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mailkit-在没有完整mime消息的情况下获取HTML和文本部分_C#_Mailkit_Mimekit - Fatal编程技术网

C# Mailkit-在没有完整mime消息的情况下获取HTML和文本部分

C# Mailkit-在没有完整mime消息的情况下获取HTML和文本部分,c#,mailkit,mimekit,C#,Mailkit,Mimekit,我想从mime消息中下载文本和html部分,并将其存储在数据库中,如果需要,稍后再下载附件。我需要这个,因为我不想在数据库中存储附件以节省磁盘空间和带宽。稍后将按需下载。我不确定我是否能够做到这一点,并且仍然能够使用MimeKit中的MimeParser 我计划这样做: 获取消息正文结构并查找文本和html部分 使用ImapFolder.GetStream下载文本和html正文部分,并通过保存节名和标题将其存储在数据库中,从而保留mime树结构。附件将不会被下载 稍后,我想在UI中显示消息,但我

我想从mime消息中下载文本和html部分,并将其存储在数据库中,如果需要,稍后再下载附件。我需要这个,因为我不想在数据库中存储附件以节省磁盘空间和带宽。稍后将按需下载。我不确定我是否能够做到这一点,并且仍然能够使用MimeKit中的MimeParser

我计划这样做:

  • 获取消息正文结构并查找文本和html部分
  • 使用ImapFolder.GetStream下载文本和html正文部分,并通过保存节名和标题将其存储在数据库中,从而保留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部分头,无法解析,而且我在GetStream方法中没有看到这样的请求头选项

    获取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);