访问Outlook公用文件夹:Java或C#

时间:2014-03-10 03:33:51

标签: c# java outlook

我想知道哪种编程语言(Java或C#)可用于 更好 ,以便从Microsoft Outlook访问公用文件夹。我是Outlook的新手,已经完成了有关访问Outlook的研究。而且,我发现与Java相比,C#主要使用。此外,一些API不能免费使用。是否有针对每种编程语言的教程指南,以便我可以关注和开发应用程序?有没有可以使用的开源库?

这些是我想要开发的东西:

  • 访问公共文件夹
  • 查看所有可用文件夹
  • 从文件夹中获取一些数据文件

我非常感谢你的宝贵帮助! =)

2 个答案:

答案 0 :(得分:3)

在.NET(C#等)中,您可以使用Exchange WebServices API通过将NuGet包Microsoft Exchange WebServices添加到您的应用程序来访问公用文件夹。

您需要一个Micrtosoft.Exchange.WebServices.Data.ExchangeService的实例,以及服务器的有效登录信息 - 以System.Net.NetworkCredential的形式传入。例如:

ExchangeService exchange = 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;

答案 1 :(得分:0)

Corey,很棒的例子。我使用了你的例子并将两者结合成一个程序并想分享。你传递一个像这样的文件夹路径:

测试文件夹\客户响应

如果找不到该文件夹​​,则返回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;

享受!

J.J。