以前、件名と時刻に基づいて Exchange 2003 サーバーで送信されたメッセージにアクセスするために webdav を使用しましたが、これはうまくいきました。
クライアントの 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
ただし、2 つの問題があります。
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>
この記事に従って相対構文を使用してきましたが、多くの組み合わせを試しました。