【发布时间】:2018-06-22 09:38:53
【问题描述】:
我正在 Embarcadero Delphi 中构建一个应用程序,其中希望从与当前用户共享的 Outlook 日历中读取约会。
我的问题是不知道在文件夹结构中的哪里可以找到这些。
在我的桌面上,我使用连接到 Exchange 服务器的 Outlook 2010(14.0.7188.5002 32 位)。我可以将同事共享的日历添加到我在 Outlook 中的日历视图中:
我可以看到有关他们约会的选定信息,主要是他们是免费的还是预订的。正是我的外部工具想知道的。
现在我想通过 Outlook 对象模型访问这些日历。
(对于发布 Delphi 代码,我深表歉意,但它主要是直接进入导入的 TLB,在其他地方按广告宣传)
我尝试像这样使用GetSharedDefaultFolder():
Recipient := FOutlook.NameSpace.CreateRecipient('bernie@someplace.com');
Recipient.Resolve;
SharedFolder := FOutlook.Namespace.GetSharedDefaultFolder(Recipient, olFolderCalendar);
但不幸的是,这在调用GetSharedDefaultFolder() 时失败了。收件人是正确的,它解决得很好。抛出的错误(作为 Delphi 异常)是:
EOleException - Der versuchte Vorgang konnte nicht ausgeführt werden. Ein Objekt wurde nicht gefunden
这翻译回英文为:“无法完成尝试的操作。找不到对象”。
如果我仅通过对象模型选择共享日历,我将不胜感激有关如何访问 Outlook 在 UI 中向我显示的相同信息的任何输入。
提前感谢您的宝贵时间, 玛丽安
【问题讨论】:
-
看到忙/闲并不表示共享。如果not shared。如果您只需要忙/闲信息,请尝试Recipient.FreeBusy。注意:我的 VBA 经验是电子邮件地址总是解析,而是使用名称。
-
如果查看 Recipient.Address 属性,它是 EX 还是 SMTP 类型的地址?
-
> 看到忙/闲并不表示共享。我通过执行“Kalender hinzufügen”->“Freigegebenen Kalender öffnen”添加了我在屏幕截图中涂黑的日历。我将其翻译回“添加日历”->“打开共享日历”。这是我唯一表明我感兴趣的日历已与我共享的迹象。我已经用对 Recipient.FreeBusy 的调用替换了对共享日历的访问,但这给了我相同的 Element not found 错误。这是否意味着没有找到收件人,即使它解决得很好,甚至日历也没有问题?
-
Recipient.Address 以“name.firstname@domain.tld”格式为我提供地址。 Recipient.AddressEntry.Type 说“SMTP”。我已经尝试过您按名称而不是地址创建收件人的建议,但以这种形式无法解决。
-
由于无法解析名称,您可能错过了创建收件人的步骤。这是VBA中的过程。 stackoverflow.com/a/5626512/1571407 请注意,您的 cmets 在将用户名发送给特定用户之前需要一个 @。帖子所有者始终会收到通知。