![](/img/trans.png)
[英]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.