簡體   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