如何从Outlook获取最新消息

我正在为我的团队在工作中用C#编写一个工作管理应用程序(因为我们愚蠢的雇主没有给我们任何适当的工具)。 我需要每隔一段时间检查一次Outlook中的新消息,我需要自上次检查后收到消息。

我已经尝试了Items.Restrict()方法并使用filter"[ReceivedTime] > ' "+lastUpdate+" ' " ,但它似乎无法正常工作。 我可能已经尝试过lastUpdate所有可能格式 – 转换为通用时间,字符串,美国日期/时间格式。 没有正常工作。 它要么在绝对不同的时间范围内给我消息,要么根本找不到任何消息。

知道我做错了什么吗? 我也在考虑使用AdvancedSearch()但实现起来会轻松快捷吗? 提前感谢您的回复!

好吧,我浪费了更多的时间在这上面,找到了一个简单的解决方案,它不会迫使我从头开始重写我的整个应用程序。

而不是使用Items.Restrict()方法来获取最新消息我使用Items.Sort()按ReceivedTime对它们进行排序,然后循环遍历Items列表中的第一条消息,直到找到比我年长的消息为止最后更新时间戳。

例:

 givenFolder.Items.Sort("[ReceivedTime]", true); //true means, it will be descending (latest at the beginning) 

不幸的是,这个解决方案有一个缺点,因为Items.Sort()似乎只能在Exchange邮箱中工作(在普通的POP邮箱中没有正确排序),但我还是只需要Exchange,所以这对我来说已经足够了。

我认为,也可以使用Outlook的AdvancedSearch或MAPI表,但我没有尝试过。

虽然不是直接的答案,但请查看Exchange Web服务托管API 1.2 SDK http://msdn.microsoft.com/en-us/library/dd633710(v=EXCHG.80).aspx 。 它更容易处理,更灵活,并且不依赖于Outlook。

使用EWS托管API处理搜索 http://msdn.microsoft.com/en-us/library/dd633671(v=exchg.80).aspx

使用EWS托管API处理搜索filter http://msdn.microsoft.com/en-us/library/dd633659(v=exchg.80).aspx

寻找MAPI Viewer。 Microsoft提供了一个,还有其他一个。 使用查看器,您可以查看文件夹和项目属性,以了解如何过滤。

但是,我认为使用EWS托管API处理搜索filter的示例将帮助您实现目标。

为什么不直接连接到您的邮件服务器并通过简单连接发出POP3或IMAP命令? 我以前在telnet中直接做过这个。 命令非常简单,也应该在windows下工作。 ( 为了参考这个 )

另一种方法可能是直接打开Outlook文件夹,但这意味着客户端版本的Outlook实际上正在运行并从服务器下载消息。

Btw,一个告诉你是否已经存在新邮件的程序,被称为biff(我怀疑它甚至存在于MS平台上)。