如何判断Outlook中的会议是否已发送邀请?

时间:2012-08-24 23:24:15

标签: c# outlook-addin outlook-2007

我正在使用C#为Outlook编写COM加载项。如果会议已保存且未发送邀请,Outlook会在表单顶部显示一条消息,指出尚未发送邀请。如何以编程方式确定尚未为会议发送邀请?

我尝试检查每个Recipient并检查MeetingResponseStatus。我希望如果邀请尚未发送,则为OlResponseNone,但如果已发送邀请但未收到回复,则OlResponseNotResponded。但是,对于未收到邀请或尚未提出邀请的收件人,我总是获得OlResponseNone。因此,我不能分开一个会议,其中没有发送邀请,但没有人回复。

我在Outlook 2007中完成了大部分测试,但我相信2003年和2010年也是如此,所有这些都需要我支持。

1 个答案:

答案 0 :(得分:1)

我在this post找到了部分答案。我需要阅读DASL属性“http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102”。在Outlook 2007和leter中,您可以使用PropertyAccessor执行此操作,如下所示:

appointment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102");

但是,我还需要支持Outlook 2003,并且在Outlook 2007中添加了PropertyAccessor属性。因此我可以使用Redemption's RDOMail object和以下代码(省略错误处理)。

var _session = New RDOSession();
_session.Logon();
var _message = _session.GetMessageFromID(appointment.EntryID, ((Outlook.MAPIFolder)appointment.Parent).StoreID);
return (bool)_message.Fields["http://schemas.microsoft.com/mapi/id/{00062002-0000-0000-C000-000000000046}/8229000B"];
Marshal.ReleaseComObject(_message);
_session.Logoff();
Marshal.ReleaseComObject(_session);