在MailKit中,如何获取消息的原始表示?

时间:2015-10-15 10:09:30

标签: c# .net imap mailkit

我使用MailFolder.Fetch通过IMAP下载邮件,然后使用MailFolder.GetBodyPart获取相关的正文部分。

除了处理过的信息之外,是否可以获取MIME消息的原始表示?

代码:

 <ItemTemplate>
                Price:
                <asp:Label ID="PriceLabel" runat="server" Text='<%# Eval("Price") %>' />
                <br />
<br />
            </ItemTemplate>
        </asp:DataList>

稍后我通过运行部件,找到html和普通部件并按照this问题(仅下载不是var query = CreateSearchQuery(startDate, endDate); await mailFolder.OpenAsync(FolderAccess.ReadOnly); var results = await mailFolder.SearchAsync(SearchOptions.All, query); var messageSummaries = await mailFolder.FetchAsync(results.UniqueIds, DownloadFlags); 的部件)下载来下载消息。< / p>

2 个答案:

答案 0 :(得分:2)

如果您只下载单个MIME部分,则无法获取完整消息的原始表示(除非您下载所有部分并重新构建消息),但是< em>可以使用您从WriteTo()返回的每个MimeEntity上存在的MailFolder.GetBodyPart()方法获取您下载的每个MIME部分的原始表示形式。< / p>

如果您想要完整消息的原始表示,那么最简单的方法是使用MailFolder.GetMessage(),然后调用WriteTo()上的MimeMessage方法或者您可以通过以下方式使用MailFolder.GetStream()

var raw = folder.GetStream (uid, string.Empty);

我建议如果你知道你需要完整的原始信息,最好避免首先下载单个部分,因为这只会浪费带宽。如果您决定使用GetStream(),则可以将流提供给MimeMessage.Load()并返回已解析的MimeMessage对象。

注意:如果您使用WriteTo()方法,如果您想要阅读原始邮件或正文部分数据,请不要忘记在流中寻找0。

答案 1 :(得分:0)

最后,我需要的不一定是特定消息的原始数据,而是我从服务器获取的数据是提供给用户的数据的证据,实际上WriteTo没有做到这一点正是因为它将加载到C#对象的数据转换回字符串。

我打算打开库并将ImapStream重定向到一个将数据复制到另一个流的新类型,但幸运的是Jeff已经想到了并实现了注入{{1}的选项已经做到了。

希望将来帮助某人。