web-dev-qa-db-ja.com

よく知られていないフォルダ名のExchange WebサービスFolderId

ルートの子(受信トレイではない)であるExchangeメールボックスにフォルダーがあります。

EWSマネージAPIを使用してそのようなフォルダーのIDを取得するにはどうすればよいですか?

私が見つける例は、WellKnownFolderNamesに関連するものだけです。

25
marcwenger

FindFoldersメソッドを使用してすべてのフォルダを検索できます。使用する WellKnownFolderName.Root受信トレイのすべてのフォルダを表示します。 FolderViewを作成し、表示するプロパティを追加する必要があります(たとえば、IDおよびDisplayName)。トラバーサルをDeepに設定して、すべてのフォルダーを検索します。私の例では、DisplayName "Test"のフォルダーを探しています。

// set Server
ExchangeService server = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
server.UseDefaultCredentials = true;
string configUrl = @"https://yourServerAddress.asmx";
server.Url = new Uri(configUrl);

// set View
FolderView view = new FolderView(100);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
view.PropertySet.Add(FolderSchema.DisplayName);
view.Traversal = FolderTraversal.Deep;

FindFoldersResults findFolderResults = server.FindFolders(WellKnownFolderName.Root, view);

// find specific folder
foreach (Folder f in findFolderResults)
{
    // show FolderId of the folder "Test"
    if (f.DisplayName == "Test")
    {
        Console.WriteLine(f.Id);
    }
}
36
andreaspfr

少し遅れましたが、以下は私がフォルダを見つけるために使用したものです。

var view = new FolderView(1);
view.Traversal = FolderTraversal.Deep;
var filter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Rejected");
var results = Service.FindFolders(WellKnownFolderName.Root, filter, view);
if (results.TotalCount < 1)
    throw new Exception("Cannot find Rejected folder");
if (results.TotalCount > 1)
    throw new Exception("Multiple Rejected folders");
Rejected = Folder.Bind(Service, results.Folders.Single().Id);

編集:どうやら私のコードはネストされた階層では機能しませんでした。 cookiemonsterの提案された編集に従って、行を追加しました。

16
Ethan Reesor

7プライの答えは有効ですが、望ましくない結果になる可能性があります。

次の構造があるとします。

Root
--Folder A
----Test
--Folder B
----Test

彼が提供したコードは、両方のテストフォルダーを返します。

パスがわかっている場合(フォルダーB /テストなど)、フォルダーパスを繰り返し取得できます。

このリンクの私のメソッドSetFolderHomePageを参照してください: http://www.infinitec.de/post/2011/10/05/Setting-the-Homepage-of-an-Exchange-folder- using-the-EWS-Managed-API.aspx

6
Henning Krause