Exchange Web服务搜索PDF正文

时间:2018-03-15 19:51:58

标签: c# asp.net pdf exchangewebservices

负责开发一个小型服务,该服务将通过邮箱文件夹检查某些文件是否实际发送给客户。目标是从用户手动搜索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);
        }

1 个答案:

答案 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