Как использовать WebDav для сопоставления dav: href со значением href Outolook Interop

Ранее я использовал webdav для доступа к отправленным сообщениям на сервере Exchange 2003 в зависимости от темы и времени, и это сработало.

Теперь мне нужно реализовать еще одну функцию, которая означает перетаскивание сообщения из клиентского Outlook (а не веб-доступа) в форму Windows с последующим запросом 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>

Я использовал относительный синтаксис согласно этой статье, но перепробовал множество комбинаций.


person John    schedule 01.06.2009    source источник
comment
Разве вам не нужны имена пользователей в URL-адресе?   -  person 76mel    schedule 01.06.2009
comment
Я пробовал с и без (useralias - это почтовый ящик)   -  person John    schedule 02.06.2009


Ответы (2)


Это довольно длинно, но я еще не нашел лучшего способа сделать это:

Outlook.MailItem.EntryID содержит 4 Guid, хотя я не уверен, с чем они все связаны. Последний гид содержит информацию, которая вам нужна.

00000000E6053DD369FAB340B6B8C4D77A0
B37D30700173A23D2AA06A3488E75E759DD
1ACBBB00000A6F78CC00007B9F3D877B316
4499DE695FBB7FCDE5F00000 EBD83000

Жирным шрифтом выделен идентификатор сообщений, который мы можем использовать (из всех сообщений в моем почтовом ящике только эти 7 цифр различались в своих идентификаторах записей).

Затем измените свой запрос webDAV, чтобы вернуть свойство DAV:permanenturl. Это будет выглядеть так:

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

Таким образом, все, что вам нужно сделать для сопоставления, - это выполнить запрос webDAV для всех элементов в указанном почтовом ящике, в цикле сравнивая PermanentURL с частью EntryID, чтобы найти свой совпадение.

Я был бы более счастлив, если бы в webDAV был EntryID, но, похоже, он не доступен напрямую.

person Pondidum    schedule 30.11.2009

Когда я хотел выяснить, как отправить WebDav в Exchange 2003, я запустил Fiddler2 и просмотрел сообщения, которые отправлял Outlook Web Access. Вам понадобится Fiddler2, если вы хотите распаковать ответы https.

person Cheeso    schedule 01.06.2009