2012-06-27 44 views
3

是否可以直接返回MailItem作为Outlook MailItem作为流

(从Microsoft.Office.Interop.OutlookMailItem)现在我已经找到了一个临时的解决方案首先MailItem保存到一个目录,打开它,并流回到该文件,并再次之后删除该文件。

这个临时解决方案在处理大量电子邮件时很慢,我想用它替换它。直接返回MailItem作为MemoryStream

这怎么办?

编辑,由于评价:正在缓慢是其中的一部分,但另一个codepart(不能修改)只接受一个流,这是办法,我寻找一个解决方案打开的MailItem作为流)

+2

我在一分钟左右的时间内使用mailitem直接处理高达600个信息 - 这绝不构成答案的一部分,所以我好奇你为什么需要一个流? – BugFinder

+1

您可以尝试使用[EWS而不是VSTO](http://msdn.microsoft.com/zh-cn/library/dd637749%28v=exchg.80%29.aspx)。除非您使用**剪贴板**或**拖放**,否则无法将“MailItem”作为“MemoryStream”访问。 – SliverNinja

+0

类似的问题我发现:http://stackoverflow.com/questions/9595440/getting-system-net-mail-mailmessage-as-a-memorystream-in-net-4-5-beta – juFo

回答

0

我有一个想法,你的缓慢的问题。我写了一些可能会在写作时产生巨大影响的东西。

当我在非缓存模式下进行展望时,检索并打开每封电子邮件,然后将其移至已处理的文件夹是很困难的,至少可以说。当我使用缓存模式时,当然我必须编写代码以确保它能够同步所有内容,因此在开始之前我已经对信息进行了修改。

当其缓存时,您可以同时打开许多邮件项目,并行处理,在非缓存模式下,它会阻止您在32个左右!它的开放思想(和我们的)是不同的。

所以,我也尝试了一个imap类,sheesh让我们再也不会说那个错误了。

如果你有一些代码,也许我们可以帮忙吗?如果你没有缓存模式,我可以挖掘我如何强制它同步所有的代码,它不像我想的那样简单(我可能错过了某些),但它工作非常可靠,现在处理所有的备份电子邮件我得到..

+0

好得很慢一件事,但我需要作为一个Stream的MailItem(一个Stream是唯一被接受的东西)。所以这就是我想知道如何直接获得一个MailItem作为Stream。 – juFo

+0

什么需要流?我没有尝试过,在Delphi下,你可以创建一个内存流,然后将正文文本写到该流中,以便用另一个流读取它。或者,我猜你可以将所有邮件以unix样式写入文本文件并阅读作为一个流......需要一个流作为输入?也许我们可以强迫它做别的事情? – BugFinder