1

我以前使用 webdav 根据主题和时间访问 Exchange 2003 服务器上发送的消息,这已经奏效。

我现在需要实现另一个功能,这意味着将消息从客户端 Outlook(不是 Web 访问)拖到 Windows 窗体上,然后在 Exchange 上查询 webdav 以获取有关此消息的所有信息。

我可以使用以下代码获取消息 href:

Dim msg As MAPI.Message = CType(session.GetMessage(mail.EntryID), MAPI.Message)
Dim id as string = CType(CType(msg.Fields(), MAPI.Fields).Item(&H6707001E), MAPI.Field).Value.ToString

但是有两个问题;

1) URL 上的编码在我从拖动的消息中获得的内容和从 webdav 带回的内容之间是不同的(如果我要求所有邮件,我可以看到这些)。

2)无论我如何格式化查询,即使我在带回所有消息时从列表中复制 href,它也永远不会带回结果。

以下是失败的搜索请求示例(如果您删除 where 子句则有效):

    <?xml version="1.0" ?>
    <D:searchrequest xmlns:D="DAV:">
        <D:sql>SELECT "DAV:contentclass","DAV:href", "DAV:displayname","urn:schemas:httpmail:datereceived","urn:schemas:httpmail:subject" 
FROM "https://server/exchange/mailbox" WHERE "DAV:href"='/Inbox/email.EML'</D:sql>
    </D:searchrequest>

根据本文,我一直在使用相对语法,但尝试了许多组合。

4

2 回答 2

3

这很啰嗦,但我还没有找到更好的方法:

Outlook.MailItem.EntryID 包含 4 个 Guid,尽管我不确定它们都映射到什么。最后一个 guid 包含您需要的信息。

00000000E6053DD369FAB340B6B8C4D77A0
B37D30700173A23D2AA06A3488E75E759DD
1ACBBB00000A6F78CC00007B9F3D877B316
4499DE695FBB7FCDE5F00000 EBD83B _

粗体部分是我们可以使用的消息 ID(在我的收件箱中的所有消息中,只有这 7 位数字在它们的条目 ID 之间有所不同)。

接下来,修改您的 webDAV 查询以恢复该DAV:permanenturl属性。这将如下所示:

https://SERVER_NAME/exchange/MAILBOX@DOMAIN >COM/-FlatUrlSpace-/173a23d2aa06a3488e75e759dd1acbbb-a6f78cc/7b9f3d877b3164499de695fbb7fcde5f- ebd83b9

因此,匹配所需要做的就是对指定邮箱中的所有项目进行 webDAV 查询,循环比较PermanentURL和部分EntryID以找到匹配项。

如果 webDAV 上有一个 EntryID,我会更高兴,但似乎没有可直接访问的。

于 2009-11-30T13:33:03.503 回答
0

当我想弄清楚如何将 WebDav 发送到 Exchange 2003 时,我启动了 Fiddler2 并查看了 Outlook Web Access 正在发送的消息。如果要解压缩 https 响应,则需要 Fiddler2。

于 2009-06-01T21:58:21.903 回答