【问题标题】:How To Access Exchange 2003 Private (Contact) Items Programmatically如何以编程方式访问 Exchange 2003 私人(联系人)项目
【发布时间】:2015-06-08 19:51:06
【问题描述】:

我正在寻找一种以编程方式 (.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#)来说明如何访问私人邮箱的“联系人”文件夹(或子文件夹),以便在那里编写新的联系人项目?

【问题讨论】:

  • 完全独立会有问题,但请查看 Redemption Data Objects,它公开了 Outlook 使用的 CDO/RDO 机制。它确实需要安装 Outlook,但不需要运行它(它使用库,它不会自动化它)。我们最近开始使用它,并且获得了比 EWS 更好的性能。 dimastr.com/redemption/rdo_introduction.htm 即使您不使用它,也可以获取 OutlookSpy 的(免费)副本,它会公开大量有关 Exchange 内部工作方式的信息(向 Outlook 添加工具栏)
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @John Saunders:感谢您为执行合规所做的努力。在我的特殊情况下,我觉得从标题中删除的“.Net”对于强调我不需要接收 C++/java 等解决方案,而只需要接收 .Net 是必不可少的。我想有些人可能会因为“.net”标签而认为这很明显。除非另有明确说明,否则标签是否具有“仅”异或“很高兴”的含义?
  • 由于您使用了 .NET 标签,任何人都会错误地给您一个 Java 或 C++ 答案。
  • 我认为我首先应该问的问题是:“是否可以使用 Outlook 互操作将联系人项目写入另一个用户的邮箱,在他们的联系人文件夹下的子文件夹中,前提是我的用户拥有其他用户邮箱的完全权限?”请随时回复。谢谢:-)

标签: .net exchange-server-2003


【解决方案1】:

[从评论中推荐]

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

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

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

【讨论】:

【解决方案2】:

如果您尝试从 .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);
    }
}

【讨论】:

  • 另一个含义是您需要在运行此工具的机器上安装 Outlook 并配置适当的配置文件。
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多