您如何使用 EWS Managed API 和 ColdFusion 搜索收件箱?
How do you search an inbox using the EWS Managed API with ColdFusion?
我们正在使用 ColdFusion 2016 并使用 EWS API 连接到交换。我已经设法从以下 post 中获取代码示例,但我无法弄清楚如何将 SearchFilter 与 findItems() 方法一起使用。
Why is the get action of cfexchangemail never returning?
service = createObject("Java", "microsoft.exchange.webservices.data.ExchangeService");
service.init();
version = createObject("Java", "microsoft.exchange.webservices.data.ExchangeVersion");
service.init(version.Exchange2010);
credentials = createObject("Java", "microsoft.exchange.webservices.data.WebCredentials");
credentials.init(yourusername, yourpassword);
service.setCredentials(credentials);
uri = createObject("Java", "java.net.URI");
uri.init("outlook webservices url");
service.setUrl(uri);
WellKnownFolderName=createObject("Java","microsoft.exchange.webservices.data.WellKnownFolderName");
result = service.FindItems(service.WellKnownFolderName.Inbox, CreateObject("java", "microsoft.exchange.webservices.data.ItemView").init(100));
for(item in result.getItems(){
// ..loop through each field and store their value
// in query object or something...
}
所以基本上可以将此 Java 代码转换为 Coldfusion 吗?
ItemView view = new ItemView(10);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived));
FindItemsResults<Item> findResults =
service.findItems(WellKnownFolderName.Inbox,
new SearchFilter.SearchFilterCollection(
LogicalOperator.Or, new SearchFilter.ContainsSubstring(ItemSchema.Subject, "EWS"),
new SearchFilter.ContainsSubstring(ItemSchema.Subject, "API")), view);
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
System.out.println("Total number of items found: " + findResults.getTotalCount());
for (Item item : findResults) {
System.out.println(item.getSubject());
System.out.println(item.getBody());
// Do something with the item.
}
根据评论更新:
我不知道如何实例化 SearchFilter
或 SearchFilterCollection
。我尝试创建一个 searchFilter 对象,但它没有可使用的属性。我一定是错过了什么。
CreateObject("java","microsoft.exchange.webservices.data.SearchFilter");
(不是完整答案,但评论太长)
难怪...那是 很多 的嵌套。我没有安装那个库,但如果是我,我会首先将它分解成单独的语句,每行一个 new
对象。从最里面的构造函数开始:
new SearchFilter.ContainsSubstring(
ItemSchema.Subject
, "API"
)
您需要先创建 ItemSchema
的实例,才能访问 Subject
属性。查看 C# docs(没有可用的 javadoc)路径应该是这样的:
ItemSchema = createObject("java", "microsoft.exchange.webservices.data.ItemSchema");
之后继续创建 SearchFilter
。注意到 class 名称中的句点 .
了吗?关键字 new
后跟一个 class 名称,包含句点,通常表示它是一个 inner class。内部 classes 需要特殊的语法,即 ParentClass$InnerClass
。这样的事情应该有效:
APISubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring");
writeDump(APISubString );
如果有效,添加init()
初始化对象:
APISubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter.ContainsSubstring").init(ItemSchema.Subject, "API");
然后移动到下一个最里面的对象:
new SearchFilter.ContainsSubstring(
ItemSchema.Subject
, "EWS"
)
然后起泡沫,冲洗,对剩余的物体重复:
// ItemSchema.Subject is a static value and can be reused
EWSSubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter.ContainsSubstring").init(ItemSchema.Subject, "EWS");
最终的工作结果是:
folderName = createObject("java", "microsoft.exchange.webservices.data.WellKnownFolderName");
itemView = CreateObject("java","microsoft.exchange.webservices.data.ItemView").init(10,0);
folderID = CreateObject("java","microsoft.exchange.webservices.data.FolderId").init(
folderName.Inbox,
mailBox
);
sortDirection = CreateObject("java","microsoft.exchange.webservices.data.SortDirection");
basePropertySet = createObject("java", "microsoft.exchange.webservices.data.BasePropertySet");
propertyset = createObject("java", "microsoft.exchange.webservices.data.PropertySet");
itemSchema = createObject("java", "microsoft.exchange.webservices.data.ItemSchema");
searchFilterCollection = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$SearchFilterCollection");
logicalOperator = createObject("java", "microsoft.exchange.webservices.data.LogicalOperator");
subString1 = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring").init(
itemSchema.Subject,
"EWS"
);
subString2 = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring").init(
itemSchema.Subject,
"API"
);
searchFilterCollection.add(SubString1);
searchFilterCollection.add(SubString2);
searchFilterCollection.setLogicalOperator(LogicalOperator.Or);
bodyType = createObject("java", "microsoft.exchange.webservices.data.BodyType");
propertyset.add(itemSchema.Subject);
propertyset.add(itemSchema.DateTimeReceived);
propertyset.setBasePropertySet(basePropertySet.IdOnly);
propertyset.setRequestedBodyType(bodyType.HTML);
itemView.getOrderBy().add(itemSchema.DateTimeReceived, sortDirection.Ascending);
itemView.setPropertySet(propertyset);
viewResults = service.findItems(folderID, searchFilterCollection, itemView);
我们正在使用 ColdFusion 2016 并使用 EWS API 连接到交换。我已经设法从以下 post 中获取代码示例,但我无法弄清楚如何将 SearchFilter 与 findItems() 方法一起使用。 Why is the get action of cfexchangemail never returning?
service = createObject("Java", "microsoft.exchange.webservices.data.ExchangeService");
service.init();
version = createObject("Java", "microsoft.exchange.webservices.data.ExchangeVersion");
service.init(version.Exchange2010);
credentials = createObject("Java", "microsoft.exchange.webservices.data.WebCredentials");
credentials.init(yourusername, yourpassword);
service.setCredentials(credentials);
uri = createObject("Java", "java.net.URI");
uri.init("outlook webservices url");
service.setUrl(uri);
WellKnownFolderName=createObject("Java","microsoft.exchange.webservices.data.WellKnownFolderName");
result = service.FindItems(service.WellKnownFolderName.Inbox, CreateObject("java", "microsoft.exchange.webservices.data.ItemView").init(100));
for(item in result.getItems(){
// ..loop through each field and store their value
// in query object or something...
}
所以基本上可以将此 Java 代码转换为 Coldfusion 吗?
ItemView view = new ItemView(10);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived));
FindItemsResults<Item> findResults =
service.findItems(WellKnownFolderName.Inbox,
new SearchFilter.SearchFilterCollection(
LogicalOperator.Or, new SearchFilter.ContainsSubstring(ItemSchema.Subject, "EWS"),
new SearchFilter.ContainsSubstring(ItemSchema.Subject, "API")), view);
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
System.out.println("Total number of items found: " + findResults.getTotalCount());
for (Item item : findResults) {
System.out.println(item.getSubject());
System.out.println(item.getBody());
// Do something with the item.
}
根据评论更新:
我不知道如何实例化 SearchFilter
或 SearchFilterCollection
。我尝试创建一个 searchFilter 对象,但它没有可使用的属性。我一定是错过了什么。
CreateObject("java","microsoft.exchange.webservices.data.SearchFilter");
(不是完整答案,但评论太长)
难怪...那是 很多 的嵌套。我没有安装那个库,但如果是我,我会首先将它分解成单独的语句,每行一个 new
对象。从最里面的构造函数开始:
new SearchFilter.ContainsSubstring(
ItemSchema.Subject
, "API"
)
您需要先创建 ItemSchema
的实例,才能访问 Subject
属性。查看 C# docs(没有可用的 javadoc)路径应该是这样的:
ItemSchema = createObject("java", "microsoft.exchange.webservices.data.ItemSchema");
之后继续创建 SearchFilter
。注意到 class 名称中的句点 .
了吗?关键字 new
后跟一个 class 名称,包含句点,通常表示它是一个 inner class。内部 classes 需要特殊的语法,即 ParentClass$InnerClass
。这样的事情应该有效:
APISubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring");
writeDump(APISubString );
如果有效,添加init()
初始化对象:
APISubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter.ContainsSubstring").init(ItemSchema.Subject, "API");
然后移动到下一个最里面的对象:
new SearchFilter.ContainsSubstring(
ItemSchema.Subject
, "EWS"
)
然后起泡沫,冲洗,对剩余的物体重复:
// ItemSchema.Subject is a static value and can be reused
EWSSubString = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter.ContainsSubstring").init(ItemSchema.Subject, "EWS");
最终的工作结果是:
folderName = createObject("java", "microsoft.exchange.webservices.data.WellKnownFolderName");
itemView = CreateObject("java","microsoft.exchange.webservices.data.ItemView").init(10,0);
folderID = CreateObject("java","microsoft.exchange.webservices.data.FolderId").init(
folderName.Inbox,
mailBox
);
sortDirection = CreateObject("java","microsoft.exchange.webservices.data.SortDirection");
basePropertySet = createObject("java", "microsoft.exchange.webservices.data.BasePropertySet");
propertyset = createObject("java", "microsoft.exchange.webservices.data.PropertySet");
itemSchema = createObject("java", "microsoft.exchange.webservices.data.ItemSchema");
searchFilterCollection = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$SearchFilterCollection");
logicalOperator = createObject("java", "microsoft.exchange.webservices.data.LogicalOperator");
subString1 = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring").init(
itemSchema.Subject,
"EWS"
);
subString2 = CreateObject("java","microsoft.exchange.webservices.data.SearchFilter$ContainsSubstring").init(
itemSchema.Subject,
"API"
);
searchFilterCollection.add(SubString1);
searchFilterCollection.add(SubString2);
searchFilterCollection.setLogicalOperator(LogicalOperator.Or);
bodyType = createObject("java", "microsoft.exchange.webservices.data.BodyType");
propertyset.add(itemSchema.Subject);
propertyset.add(itemSchema.DateTimeReceived);
propertyset.setBasePropertySet(basePropertySet.IdOnly);
propertyset.setRequestedBodyType(bodyType.HTML);
itemView.getOrderBy().add(itemSchema.DateTimeReceived, sortDirection.Ascending);
itemView.setPropertySet(propertyset);
viewResults = service.findItems(folderID, searchFilterCollection, itemView);