[英]Unable to access a different recipients account folders with C# Interop.Outlook
[英]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.