如何以编程方式访问 Exchange 2003 私人(联系人)项目

How To Access Exchange 2003 Private (Contact) Items Programmatically

我正在寻找一种方法来以编程方式 (.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 插件。

我需要一个独立的解决方案(可执行文件),每次运行时,它都会将联系人从数据库创建到用户联系人文件夹下的特定子文件夹中。

我也搜索了一些 MAPI 代码示例 (.Net),但运气不佳。

能否请您提供代码(VB.NET 或 C#)来说明如何访问私人邮箱联系人文件夹(或子文件夹),以在其中写入新的联系人项目?

如果您尝试从 .Net 执行此操作,那么您可能需要使用 Outlook 对象,如 MSDN 上 in the conclusion to the Using MAPI to Create Outlook 2007 Items 文章所述。 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);
    }
}

[从评论中提升]

完全独立会有问题,但看看 Redemption Data Objects ,它公开了 outlook 使用的 CDO/RDO 机制。它确实需要安装 Outlook,但不要求它是 运行(它使用库,但不能通过自动化 Outlook 来工作)。

我们最近开始使用 RDO,并且获得了比 EWS 更好的性能。

即使您不使用它,也可以从同一家公司获取 OutlookSpy 的(免费)副本。它将公开很多关于 Exchange 内部工作方式的信息,尤其是数据结构的使用(它向 Outlook 添加了一个工具栏,它不是独立的)。