首页 > 解决方案 > EWS 如何在我自己的邮箱中创建搜索文件夹?

问题描述

我使用以下代码创建一个 SearchFolder,但是当它到达“保存”行时,它会引发以下错误:

与文件夹 ID 关联的电子邮件地址与您正在操作的邮箱不匹配。

private SearchFolder CreateSearchFolder( string email, SearchFilter filter)
{
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    service.Credentials = new WebCredentials("mailboxworker", "password");
    service.AutodiscoverUrl(email);

    FolderId folderId = new FolderId(WellKnownFolderName.Inbox, new Mailbox(email));

    FolderId searchFolderId = new FolderId(WellKnownFolderName.SearchFolders, new Mailbox(email));

    // Create the folder.
    SearchFolder searchFolder = new SearchFolder(service);
    searchFolder.DisplayName = "Folder of " + email;

    searchFolder.SearchParameters.SearchFilter = filter;
    // Set the folder to search.
    searchFolder.SearchParameters.RootFolderIds.Add(folderId);   

    // Set the search traversal. Deep will search all subfolders.
    searchFolder.SearchParameters.Traversal = SearchFolderTraversal.Deep;
    // Call Save to make the EWS call to create the folder.
    searchFolder.Save(searchFolderId);

    return searchFolder;
}

我究竟做错了什么?

标签: c#exchangewebservices

解决方案


与文件夹 ID 关联的邮箱与邮箱不匹配

每次我遇到这个问题时,我都使用 Microsoft.Exchange.WebServices.DataWellKnownFolderName枚举而不是字符串 folderId 来修复它

以下是 MSDN 中的一个工作示例:使用 EWS 托管 API 创建搜索文件夹

此示例假定 ExchangeService 对象已使用 Credentials 和 Url 属性中的有效值进行初始化。

using Microsoft.Exchange.WebServices.Data;

static void CreateSearchFolder(string email)
{
    // Create the folder.
    SearchFolder searchFolder = new SearchFolder(service);
    searchFolder.DisplayName = "From Developer";
    // Create a search filter to express the criteria for the folder.
    EmailAddress developer= new EmailAddress("Jeremy@stackoverflow.com");
    SearchFilter.IsEqualTo fromManagerFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, developer);

    // Set the search filter.
    searchFolder.SearchParameters.SearchFilter = fromManagerFilter;
    // Set the folder to search.
    searchFolder.SearchParameters.RootFolderIds.Add(WellKnownFolderName.Inbox);
    // Set the search traversal. Deep will search all subfolders.
    searchFolder.SearchParameters.Traversal = SearchFolderTraversal.Deep;
    // Call Save to make the EWS call to create the folder.
    searchFolder.Save(WellKnownFolderName.SearchFolders);
}

这是 MSDN 上的另一个示例,使用 EWS 托管 API 2.0 创建搜索文件夹


推荐阅读