我使用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>
答案 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}的选项已经做到了。
希望将来帮助某人。