2012-02-10 89 views
0

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

我试过Items.Restrict()方法,并使用过滤器"[ReceivedTime] > ' "+lastUpdate+" ' ",但它似乎并没有正常工作。我可能已经尝试了lastUpdate的所有可能格式 - 转换为世界时间,转换为美国日期/时间格式。没有什么工作正常。它要么在完全不同的时间范围内给我发送消息,要么根本找不到任何消息。

任何想法我做错了什么?我也在考虑使用AdvancedSearch(),但实现起来会不会很快捷?提前感谢您的回复!

+0

难道你们就不能只是将项目移动到另一个文件夹处理它们之后?这样,您就知道收件箱文件夹中的唯一邮件是您没有处理的邮件,因此保持此文件夹较小。 – dash 2012-02-10 09:11:30

+0

不幸的是,我不允许移动邮件,而且其他用户可以在Outlook本身中移动邮件,因此每次执行更新周期时都需要检查每个文件夹中的最新邮件。 – Val 2012-02-10 09:20:43

回答

1

好吧,我已经浪费了更多时间,并发现了一个简单的解决方案,它不会强制我从头重写整个应用程序。

而不是使用Items.Restrict()方法来获取我使用Items.Sort()Items.Sort()按照ReceivedTime排序它们的最新消息,然后遍历来自Items列表的第一条消息,直到找到比我上次更新时间戳更早的消息。

例子:

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

该解决方案,不幸的是,有一个缺点,因为Items.Sort()似乎只有在Exchange邮箱工作(不正确排序在普通的POP邮箱),但我需要它仅适用于外汇,无论如何,所以对我来说就够了。

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

-1

为什么不直接连接到您的邮件服务器并通过简单的连接发出POP3或IMAP命令?我以前在telnet的时候直接使用它。命令非常简单,并且应该在windows下工作。 (for ref see this

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

顺便说一句,一个程序告诉你,如果你有新的邮件已经存在,被称为biff(我怀疑它甚至存在于MS平台上)。

+0

1.这是一个Exchange邮箱,所以它不是那么容易连接到服务器直接 2.我们有责任,因为我们需要以特定的方式来标记的邮件使用Outlook,我想我的应用程序要做到这一点对我们来说 3。我们有一个客户端版本的Outlook。我们不得不但是当你有几千通过邮件文件夹中的每个迭代的MailItem将采取小时,这是没用的,当你只需要得到少数鲈maessages 4.我并不需要一个程序来检查,如果我有新邮件。我需要自己的新消息!我需要从Outlook中获得它们,因为我们必须使用Outlook – Val 2012-02-10 08:21:38

+0

在telnet中尝试一些命令。交易所“知道”POP3和IMAP。通过MAPI直接访问可以是另一种选择。使用Visual Basic甚至可以很好地实现旧的自动化,这是一个不错的选择。 – BigMike 2012-02-10 08:24:09

+0

在这一点上,我认为最好使用一些MAPI控件直接连接交换和查询新消息,然后使用它们的ID直接在PST文件上访问它们,并将它们标记为你想要的。通过MAPI连接交换并不难,如果你有Outlook工作,那么你可以做到这一点。 – BigMike 2012-02-10 08:37:10

1

虽然不是直接的答案,但请看Exchange Web服务托管API 1.2 SDKhttp://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查看器工作。微软提供了一个,还有其他的。通过查看器,您可以查看文件夹和项目属性,了解您需要如何过滤。

但是,我认为中的示例通过使用EWS托管API来使用搜索过滤器将会帮助您。