c# - 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;
}
我究竟做错了什么?
解决方案
与文件夹 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 创建搜索文件夹
推荐阅读
- azure-eventhub - 如何对 Power Automate Flow 中的 bas64 编码触发器输出采取条件操作?
- android - 如何在Android App中记录按钮点击
- javascript - 如何处理 Angular 中 render2 抛出的错误?
- r - 如何在 R 和 Stata 中创建 2000 个观察值的随机虚拟变量?
- c# - linq计数二次分组和计数不分组
- c++ - 为什么 C++20 中的 [[likely]] 属性会在此处引发警告?
- python-3.x - 嵌套子列表中的元素数(从第一个索引开始)
- reactjs - 用户登录后如何调用 Firestore 数据库?
- service-worker - 如何检测离线状态的service_worker响应,并渲染离线页面而不是继续程序的常规流程?
- git - 是否可以将文件的历史记录从 git 分支传送到另一个(使用命令行)