【问题标题】:Read MSExchange emails from a custom folder从自定义文件夹读取 MSExchange 电子邮件
【发布时间】:2016-03-30 17:24:13
【问题描述】:

有没有办法使用 Java 从 MS-Exchange 中的自定义文件夹中读取电子邮件?我可以从收件箱中读取,但我有自定义文件夹名称,电子邮件被移到我希望在这些文件夹中读取代码的位置。

以下是我当前从收件箱中读取的代码:

ExchangeCredentials credentials = new WebCredentials("userName", "passWORD", "domain");
service.setCredentials(credentials);
service.setUrl(new URI("https://outlook.mycompany.com/ews/exchange.asmx"));

ItemView view = new ItemView(200);

FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox , view);

相反,我想要这样的东西:

FindItemsResults<Item> findResults = service.findItems("My Custom Folder" , view);

我试过了,但没有用:

FindItemsResults<Item> findResults = service.findItems(FolderId.getFolderIdFromString("My Custom Folder") , view);

【问题讨论】:

    标签: java directory exchangewebservices


    【解决方案1】:

    您需要使用 FindFolder 操作来查找相关文件夹的 ewsId。通常,最简单的方法是将要访问的文件夹转换为路径,例如,如果文件夹是收件箱的子文件夹,那么路径字符串将是 \Inbox\Subfolder 名称,那么您应该能够使用类似以下的内容将路径拆分出来做多个查找以获取您之后的特定文件夹(这是 c#,但您应该能够轻松转换为 java,因为类几乎相同)

        internal static Folder GetFolderFromPath(ExchangeService service,String MailboxName,String FolderPath)
        {
            FolderId folderid = new  FolderId(WellKnownFolderName.MsgFolderRoot,MailboxName);   
            Folder tfTargetFolder = Folder.Bind(service,folderid);
            PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
            String[] fldArray = FolderPath.Split('\\'); 
            for (Int32 lint = 1; lint < fldArray.Length; lint++) { 
                FolderView fvFolderView = new FolderView(1);
                fvFolderView.PropertySet = psPropset;
                SearchFilter  SfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName,fldArray[lint]); 
                FindFoldersResults findFolderResults = service.FindFolders(tfTargetFolder.Id,SfSearchFilter,fvFolderView); 
                if (findFolderResults.TotalCount > 0){ 
                foreach(Folder folder in findFolderResults.Folders){ 
                    tfTargetFolder = folder;                
                    } 
                } 
                else{ 
                    tfTargetFolder = null;  
                    break;  
                }     
            }
            if (tfTargetFolder != null)
            {
                return tfTargetFolder;
            }
            else
            {
                throw new Exception("Folder Not found");
            }
        }
    

    干杯 格伦

    【讨论】:

      【解决方案2】:

      在 java 中,下面的代码似乎可以工作。

      FolderView fview = new FolderView(1);
      fview.setPropertySet(new PropertySet(FolderSchema.DisplayName,FolderSchema.Id));
      Folder msgF = Folder.bind(service,WellKnownFolderName.MsgFolderRoot);
      FindFoldersResults res = msgF.findFolders(new SearchFilter.ContainsSubstring(FolderSchema.DisplayName,"test"),fview);
      List<Folder> fl = res.getFolders();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-10
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多