访问Outlook';s公共文件夹:Java或C#

访问Outlook';s公共文件夹:Java或C#,c#,java,outlook,C#,Java,Outlook,我想知道可以使用哪种编程语言(Java或C#)从Microsoft Outlook访问公用文件夹。我对Outlook不熟悉,并且已经做过有关访问Outlook的研究。而且,我发现与Java相比,C#是最常用的语言。此外,有些API不是免费使用的。是否有针对每种编程语言的教程指南,以便我可以遵循并开发应用程序?有没有开源库可以使用 以下是我想要发展的东西: 访问公用文件夹 查看所有可用文件夹 从文件夹中获取一些数据文件 我非常感谢你的宝贵帮助!=) 在.NET(C#等)中,您可以使用Excha

我想知道可以使用哪种编程语言(Java或C#)从Microsoft Outlook访问公用文件夹。我对Outlook不熟悉,并且已经做过有关访问Outlook的研究。而且,我发现与Java相比,C#是最常用的语言。此外,有些API不是免费使用的。是否有针对每种编程语言的教程指南,以便我可以遵循并开发应用程序?有没有开源库可以使用

以下是我想要发展的东西:

  • 访问公用文件夹
  • 查看所有可用文件夹
  • 从文件夹中获取一些数据文件
我非常感谢你的宝贵帮助!=)

在.NET(C#等)中,您可以使用Exchange Web服务API,通过向应用程序添加NuGet软件包
Microsoft Exchange Web服务
来访问公用文件夹

您需要使用Microsoft.Exchange.WebServices.Data.ExchangeService的实例,以及服务器的有效登录名(作为
System.Net.NetworkCredential
传入)。例如:

ExchangeService service = new ExchangeService();
service.AutodiscoverUrl("myemail@mycompany.com");
service.Credentials = new NetworkCredential("myemail", "mypassword", "MYDOMAIN");
一旦您有了这些功能,就可以使用以下内容搜索公共文件夹:

public Folder GetFolder(string path)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, path);

    var fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    if (fldrs != null)
        return fldrs.FirstOrDefault();
}
这将按名称返回公用文件夹树根目录中的文件夹。如果要深入,可以使用以下方法在树上行走:

public Folder GetFolder(Folder src, string FolderName)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, FolderName);

    var fldrs = src.FindFolders(filter, fview);
    if (fldrs == null)
        return null;

    return fldrs.FirstOrDefault();
}
您可以使用
Traversal
选项和
SearchFilter
让Exchange Web服务为您做一些工作。我的公用文件夹存储在另一个国家的服务器上(不是我自己选择的),所以这样做更快。YMMV

对于上述所有内容,您需要包括以下内容:

using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
在.NET(C#等)中,您可以使用Exchange Web服务API通过向应用程序添加NuGet软件包Microsoft Exchange Web服务来访问公用文件夹

您需要使用Microsoft.Exchange.WebServices.Data.ExchangeService的实例,以及服务器的有效登录名(作为
System.Net.NetworkCredential
传入)。例如:

ExchangeService service = new ExchangeService();
service.AutodiscoverUrl("myemail@mycompany.com");
service.Credentials = new NetworkCredential("myemail", "mypassword", "MYDOMAIN");
一旦您有了这些功能,就可以使用以下内容搜索公共文件夹:

public Folder GetFolder(string path)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, path);

    var fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    if (fldrs != null)
        return fldrs.FirstOrDefault();
}
这将按名称返回公用文件夹树根目录中的文件夹。如果要深入,可以使用以下方法在树上行走:

public Folder GetFolder(Folder src, string FolderName)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, FolderName);

    var fldrs = src.FindFolders(filter, fview);
    if (fldrs == null)
        return null;

    return fldrs.FirstOrDefault();
}
您可以使用
Traversal
选项和
SearchFilter
让Exchange Web服务为您做一些工作。我的公用文件夹存储在另一个国家的服务器上(不是我自己选择的),所以这样做更快。YMMV

对于上述所有内容,您需要包括以下内容:

using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;

科里,很好的例子。我使用了您的示例,并将两者合并到一个过程中,希望与大家分享。向其传递一个文件夹路径,如下所示:

public Folder GetFolder(string path)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, path);

    var fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    if (fldrs != null)
        return fldrs.FirstOrDefault();
}
测试文件夹\客户响应

如果找不到该文件夹,则返回null

public static Folder GetPublicExchangeFolder(string folderPath, ExchangeService exchange)
{
  FolderView fview = new FolderView(1);
  fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
  fview.PropertySet.Add(FolderSchema.DisplayName);
  fview.Traversal = FolderTraversal.Shallow;

  Folder currentFolder = null; FindFoldersResults fldrs;

  string[] folders = folderPath.Split(new char[] { '\\' });
  foreach (string FolderName in folders)
  {
    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, FolderName);
    if(currentFolder==null)
      fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    else
      fldrs = currentFolder.FindFolders(filter, fview);
    if ((fldrs == null) || (fldrs.Count()==0))
      return null;
    else
      currentFolder = fldrs.FirstOrDefault();
  }
  return currentFolder;
}
与另一个示例一样,您需要连接到exchange服务

ExchangeService exchange = new ExchangeService();
exchange .AutodiscoverUrl("myemail@mycompany.com");
exchange .Credentials = new NetworkCredential("myemail", "mypassword", "MYDOMAIN");
并包括以下各项:

using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
享受吧


J.J.

科里,很好的例子。我使用了您的示例,并将两者合并到一个过程中,希望与大家分享。向其传递一个文件夹路径,如下所示:

public Folder GetFolder(string path)
{
    FolderView fview = new FolderView(100);
    fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    fview.PropertySet.Add(FolderSchema.DisplayName);
    fview.Traversal = FolderTraversal.Shallow;

    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, path);

    var fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    if (fldrs != null)
        return fldrs.FirstOrDefault();
}
测试文件夹\客户响应

如果找不到该文件夹,则返回null

public static Folder GetPublicExchangeFolder(string folderPath, ExchangeService exchange)
{
  FolderView fview = new FolderView(1);
  fview.PropertySet = new PropertySet(BasePropertySet.IdOnly);
  fview.PropertySet.Add(FolderSchema.DisplayName);
  fview.Traversal = FolderTraversal.Shallow;

  Folder currentFolder = null; FindFoldersResults fldrs;

  string[] folders = folderPath.Split(new char[] { '\\' });
  foreach (string FolderName in folders)
  {
    SearchFilter filter = new SearchFilter.ContainsSubstring(FolderSchema.DisplayName, FolderName);
    if(currentFolder==null)
      fldrs = exchange.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, fview);
    else
      fldrs = currentFolder.FindFolders(filter, fview);
    if ((fldrs == null) || (fldrs.Count()==0))
      return null;
    else
      currentFolder = fldrs.FirstOrDefault();
  }
  return currentFolder;
}
与另一个示例一样,您需要连接到exchange服务

ExchangeService exchange = new ExchangeService();
exchange .AutodiscoverUrl("myemail@mycompany.com");
exchange .Credentials = new NetworkCredential("myemail", "mypassword", "MYDOMAIN");
并包括以下各项:

using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
享受吧


J.J.

非常感谢您的帮助!这对我来说是一个非常有用的参考。谢谢你的网络服务建议。但当我尝试中提到的递归遍历时,遇到了一个异常,即没有可用的公用文件夹服务器。有什么办法可以解决吗?src和foldername中会出现什么?GetFolder中传递的参数名?@yatinbc
src
是从
GetFolder
返回的
文件夹(任一版本)而
FolderName
是您正在查找的文件夹的名称。我无法获取公共文件夹谢谢@jamestomey进行编辑。谢谢。非常感谢你的帮助!这对我来说是一个非常有用的参考。谢谢你的网络服务建议。但当我尝试中提到的递归遍历时,遇到了一个异常,即没有可用的公用文件夹服务器。有什么办法可以解决吗?src和foldername中会出现什么?GetFolder中传递的参数名?@yatinbc
src
是从
GetFolder
返回的
文件夹(任一版本)而
FolderName
是您正在查找的文件夹的名称。我无法获取公共文件夹谢谢@jamestomey进行编辑。在folderpath中会有什么,在GetPublicExchangeFolder中传递的参数是要打开的“所有公用文件夹”的路径。例如,如果要在exchange中打开“所有公用文件夹”下的文件夹“传真\客户服务”,则应将“传真\客户服务”传递到该过程中。由于没有可用的公用文件夹服务器,因此出现错误。原因可能是什么,在GetPublicExchangeFolder中传递的参数是要打开的“所有公用文件夹”的路径。例如,如果您想打开exchange中“所有公用文件夹”下的文件夹“传真\客户服务”,您可以将“传真\客户服务”传递到过程中。由于没有可用的公用文件夹服务器,我收到了错误。原因可能是什么