繁体   English   中英

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

[英]Access to Outlook's Public Folders: Java or C#

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

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

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

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

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

您需要使用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 服务为您完成一些工作。 我的公用文件夹存储在另一个国家的服务器上(不是我选择的),所以这样做会更快。 天啊。

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

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

科里,很好的例子。 我使用了您的示例并将两者合并为一个程序并想共享。 您向它传递一个文件夹路径,如下所示:

测试文件夹\\客户响应

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

与其他示例一样,您需要连接到交换服务。

ExchangeService exchange = new ExchangeService();
exchange .AutodiscoverUrl("myemail@mycompany.com");
exchange .Credentials = new NetworkCredential("myemail", "mypassword", "MYDOMAIN");

并包括以下内容:

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

享受!

杰杰

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM