我想知道哪种编程语言(Java或C#)可用于 更好 ,以便从Microsoft Outlook访问公用文件夹。我是Outlook的新手,已经完成了有关访问Outlook的研究。而且,我发现与Java相比,C#主要使用。此外,一些API不能免费使用。是否有针对每种编程语言的教程指南,以便我可以关注和开发应用程序?有没有可以使用的开源库?
这些是我想要开发的东西:
我非常感谢你的宝贵帮助! =)
答案 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。