我正在为我的团队在工作中用C#编写一个工作管理应用程序(因为我们愚蠢的雇主没有给我们任何适当的工具)。我需要每隔一段时间检查Outlook中的新消息,我需要在上次检查时收到消息。
我尝试了Items.Restrict()
方法并使用过滤器"[ReceivedTime] > ' "+lastUpdate+" ' "
,但它似乎无法正常工作。我可能已经尝试了lastUpdate
的每种可能格式 - 转换为通用时间,字符串,美国日期/时间格式。没有正常工作。它要么在绝对不同的时间范围内给我消息,要么根本找不到任何消息。
知道我做错了什么吗?我也在考虑使用AdvancedSearch()
,但实施起来会轻松快捷吗?提前感谢您的回复!
答案 0 :(得分:2)
好的,我浪费了更多的时间在这上面,找到了一个简单的解决方案,它不会强迫我从头开始重写整个应用程序。
而不是使用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表,但我还没试过。
答案 1 :(得分:1)
虽然不是直接答案,但请查看 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 使用搜索过滤器 http://msdn.microsoft.com/en-us/library/dd633659(v=exchg.80).aspx
查找MAPI查看器。 Microsoft提供了一个,还有其他。使用查看器,您可以查看文件夹和项目属性,以了解如何过滤。
然而,我认为使用EWS托管API 处理搜索过滤器中的示例将帮助您实现目标。
答案 2 :(得分:0)
对于那些遇到此问题的人,这里也有类似的问题被回答:Restrict Outlook Items by Date
这是文档页面:https://docs.microsoft.com/en-us/office/vba/api/Outlook.Items.Restrict
日期的格式必须像这样:M/d/yy h:mm tt
(。NET日期格式字符串)例如:2007年5月6日上午8:09变成5/6/07 8:09 AM
,完整的过滤字符串然后变成{{1 }}(单引号很重要)
答案 3 :(得分:-1)
为什么不直接连接到您的邮件服务器并通过简单连接发出POP3或IMAP命令?我以前在telnet中直接做过这个。命令很简单,也应该在windows下工作。 (for ref see this)
另一种方法可能是直接打开Outlook文件夹,但这意味着Outlook的客户端版本实际上正在运行并从服务器下载邮件。
Btw,一个告诉你是否已经存在新邮件的程序,被称为biff(我怀疑它甚至存在于MS平台上)。