我正在寻找一种以编程方式(.Net)访问Exchange 2003服务器上的PRIVATE联系人文件夹的方法,以创建一个从数据库创建联系人的子文件夹。
我到目前为止找到的解决方案依赖于EWS,例如https://social.msdn.microsoft.com/Forums/en-US/aec6c998-f304-439c-9fa7-27bb9a4c4b45/problem-accessing-folders-in-another-mailbox?forum=exchangesvrdevelopment - 此类示例适用于2007年以上,我必须定位的Exchange服务器是2003年。
其他例子是outlook Addins。
我需要一个独立的解决方案(可执行文件),每次运行时,它都会将数据库中的联系人创建到用户的“联系人”文件夹下的特定子文件夹中。
我还搜索了一些MAPI代码示例(.Net)而没有太多运气。
请您提供说明如何访问私人邮箱联系人文件夹(或子文件夹)以在其中编写新联系人项目的代码(VB.NET或C#)?
答案 0 :(得分:0)
如果您尝试从.Net执行此操作,那么您可能需要使用MSDN上描述的in the conclusion to the Using MAPI to Create Outlook 2007 Items文章中的Outlook对象。 CDO和RDO旨在与VBscript和其他非托管代码一起使用。
使用此方法,您可以使用C#在给定邮箱中利用Outlook 2007(或更好)自动化。是的,它需要一个对目标邮箱具有适当访问权限的帐户,并且您必须遍历邮箱并自行导航文件夹树。
他们给出的例子是:
private void AddContact()
{
try
{
Outlook.ContactItem oContact =
Application.CreateItem(
Outlook.OlItemType.olContactItem)
as Outlook.ContactItem;
oContact.FirstName = "Jacqueline";
oContact.LastName = "Haddad";
oContact.Initials = "J.H.";
oContact.CompanyName = "Microsoft";
oContact.Email1Address = "someone@example.com";
oContact.Email1AddressType = "SMTP";
oContact.Email1DisplayName =
"Jacqueline Haddad (someone@example.com)";
oContact.BusinessAddressStreet = "1 Microsoft Way";
oContact.BusinessAddressCity = "Redmond";
oContact.BusinessAddressState = "WA";
oContact.BusinessAddressPostalCode = "95802";
oContact.BusinessAddressCountry = "USA";
oContact.BusinessTelephoneNumber = "800-555-1212";
oContact.WebPage = "http://www.codeplex.com/mfcmapi";
oContact.Body = "This is a sample note.";
oContact.Save();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
答案 1 :(得分:0)
[通过评论推广]
完全独立会有问题,但请查看Redemption Data Objects,它揭示了outlook使用的CDO / RDO机制。它确实需要安装Outlook,但不要求它运行(它使用库,但不能通过自动化Outlook工作)。
我们最近开始使用RDO并且获得了比EWS更好的性能。
即使您不使用它,也请抓住同一家公司的OutlookSpy(免费)副本。它将公开很多关于Exchange如何在内部工作的信息,尤其是数据结构的使用(它为Outlook添加了一个工具栏,它并不孤立)。