1

以前、件名と時刻に基づいて 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>

この記事に従って相対構文を使用してきましたが、多くの組み合わせを試しました。

4

2 に答える 2

3

これは非常に長い道のりですが、これを行うためのより良い方法をまだ見つけていません。

Outlook.MailItem.EntryID には 4 つの Guid が含まれていますが、それらすべてが何にマップされているかはわかりません。最後の GUID には、必要な情報が含まれています。

00000000E6053DD369FAB340B6B8C4D77A0
B37D30700173A23D2AA06A3488E75E759DD
1ACBBB00000A6F78CC00007B9F3D877B316
4499DE695FBB7FCDE5F00000 EBD0803B _

太字の部分は、使用できるメッセージ 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 に答える