负责开发一个小型服务,该服务将通过邮箱文件夹检查某些文件是否实际发送给客户。目标是从用户手动搜索Outlook并手动进行自动化。
例如,我们有一张发票,用户将手动进入该邮箱并输入" insta search"搜索栏发票号。当他们这样做时,即使发票编号所在的唯一位置在PDF本身内,结果也会返回一封电子邮件。以下示例......
Emai对象属性:
主题:客户名称1-1-2017
正文:随附1至1717年的收费发票
附件:客户名称1-1-2017(实际PDF内部是此电子邮件中实际发票编号所在的唯一位置,这是我正在搜索的内容)。
通过我们必须在Exchange Server上安装的称为iFilter的东西来进行研究看起来是可能的吗?
我的问题是使用EWS无论如何都要利用搜索PDF正文的功能?我的当前代码在下面并且如果发票编号在主题或正文中,则有效,但我们很少再这样做,这将是对流程变更的实质性要求。应该提一下,我真的只是想查看特定发票号的结果是否返回,因此我不需要EWS实际返回的PDF。
//initialize the service
ExchangeService service = new ExchangeService();
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("email");
//get everything ready for the search
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Subject, "invoiceNumber"));
searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Body, "invoiceNumber"));
searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Attachments, "invoiceNumber"));
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection);
//item view settings
ItemView view = new ItemView(50);
Mailbox mailbox = new Mailbox("inboxLocation");
FolderId folderId = new FolderId(WellKnownFolderName.Inbox, mailbox);
//find the results
FindItemsResults<Item> results = service.FindItems(folderId, searchFilter, view);
foreach (Item item in results.Items)
{
Console.WriteLine(item.Subject);
}
答案 0 :(得分:0)
这取决于您在2010年使用的Exchange版本,您必须安装ifilter作为选项。在2013年及以上,默认情况下安装,因此PDF内容应包含在Exchange内容索引中。
然而,您的代码不会搜索内容索引,您需要使用Finditems中的QueryString参数来使用AQS或KQL,请参阅https://msdn.microsoft.com/en-us/library/office/dn579420(v=exchg.150).aspx