访问Outlook';s公共文件夹:Java或C#
我想知道可以使用哪种编程语言(Java或C#)从Microsoft Outlook访问公用文件夹。我对Outlook不熟悉,并且已经做过有关访问Outlook的研究。而且,我发现与Java相比,C#是最常用的语言。此外,有些API不是免费使用的。是否有针对每种编程语言的教程指南,以便我可以遵循并开发应用程序?有没有开源库可以使用 以下是我想要发展的东西:访问Outlook';s公共文件夹:Java或C#,c#,java,outlook,C#,Java,Outlook,我想知道可以使用哪种编程语言(Java或C#)从Microsoft Outlook访问公用文件夹。我对Outlook不熟悉,并且已经做过有关访问Outlook的研究。而且,我发现与Java相比,C#是最常用的语言。此外,有些API不是免费使用的。是否有针对每种编程语言的教程指南,以便我可以遵循并开发应用程序?有没有开源库可以使用 以下是我想要发展的东西: 访问公用文件夹 查看所有可用文件夹 从文件夹中获取一些数据文件 我非常感谢你的宝贵帮助!=) 在.NET(C#等)中,您可以使用Excha
- 访问公用文件夹
- 查看所有可用文件夹
- 从文件夹中获取一些数据文件
Microsoft Exchange Web服务
来访问公用文件夹
您需要使用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服务为您做一些工作。我的公用文件夹存储在另一个国家的服务器上(不是我自己选择的),所以这样做更快。YMMV
对于上述所有内容,您需要包括以下内容:
using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
在.NET(C#等)中,您可以使用Exchange Web服务API通过向应用程序添加NuGet软件包Microsoft Exchange Web服务来访问公用文件夹
您需要使用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服务为您做一些工作。我的公用文件夹存储在另一个国家的服务器上(不是我自己选择的),所以这样做更快。YMMV
对于上述所有内容,您需要包括以下内容:
using System.Net;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
科里,很好的例子。我使用了您的示例,并将两者合并到一个过程中,希望与大家分享。向其传递一个文件夹路径,如下所示:
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();
}
测试文件夹\客户响应
如果找不到该文件夹,则返回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;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
享受吧
J.J.科里,很好的例子。我使用了您的示例,并将两者合并到一个过程中,希望与大家分享。向其传递一个文件夹路径,如下所示:
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();
}
测试文件夹\客户响应
如果找不到该文件夹,则返回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;
using System.Net;
using Microsoft.Exchange.WebServices.Data;
享受吧
J.J.非常感谢您的帮助!这对我来说是一个非常有用的参考。谢谢你的网络服务建议。但当我尝试中提到的递归遍历时,遇到了一个异常,即没有可用的公用文件夹服务器。有什么办法可以解决吗?src和foldername中会出现什么?GetFolder中传递的参数名?@yatinbc
src
是从GetFolder
返回的文件夹(任一版本)而FolderName
是您正在查找的文件夹的名称。我无法获取公共文件夹谢谢@jamestomey进行编辑。谢谢。非常感谢你的帮助!这对我来说是一个非常有用的参考。谢谢你的网络服务建议。但当我尝试中提到的递归遍历时,遇到了一个异常,即没有可用的公用文件夹服务器。有什么办法可以解决吗?src和foldername中会出现什么?GetFolder中传递的参数名?@yatinbcsrc
是从GetFolder
返回的文件夹(任一版本)而FolderName
是您正在查找的文件夹的名称。我无法获取公共文件夹谢谢@jamestomey进行编辑。在folderpath中会有什么,在GetPublicExchangeFolder中传递的参数是要打开的“所有公用文件夹”的路径。例如,如果要在exchange中打开“所有公用文件夹”下的文件夹“传真\客户服务”,则应将“传真\客户服务”传递到该过程中。由于没有可用的公用文件夹服务器,因此出现错误。原因可能是什么,在GetPublicExchangeFolder中传递的参数是要打开的“所有公用文件夹”的路径。例如,如果您想打开exchange中“所有公用文件夹”下的文件夹“传真\客户服务”,您可以将“传真\客户服务”传递到过程中。由于没有可用的公用文件夹服务器,我收到了错误。原因可能是什么