从全局地址列表(EWS)中的PublicGroup获取GroupContact成员

时间:2010-11-19 16:21:25

标签: c# exchange-server exchangewebservices

将电子邮件发送到通讯组列表时,列表本身可在全局地址列表(GAL)中找到。在Outlook 2010中访问GAL很简单,只需弹出地址簿并选择相应的地址簿(在本例中为登录用户的GAL)。

我已经尝试过尝试访问GAL中的ContactGroup的成员,但它似乎没有ID(因此,也没有UniqueID)。它从已发送电子邮件的ToRecipients属性中显示为MailboxType.PublicGroup的MailboxType,但我无法找到如何访问实际的联系地址!

任何人都知道如何抓住他们?我已经尝试过公共文件夹搜索,搜索了完整的联系人,但似乎没有找到它。

丹尼尔。

2 个答案:

答案 0 :(得分:4)

我使用Exchange Web服务托管API 1.1 SDK,它就像一个魅力 将<exchange_server><group_name>替换为您自己的。{/ p>

using System;
using System.Windows.Forms;
using Microsoft.Exchange.WebServices.Data;

namespace test3
{
    public partial class Form1 : Form
    {
        ExchangeService service = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            service = new ExchangeService();
            service.Url = new Uri("https://<exchange_server>/EWS/Exchange.asmx");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NameResolutionCollection nameResolutions = service.ResolveName(
                "<group_name>",
                ResolveNameSearchLocation.DirectoryOnly,
                true);

            foreach (NameResolution nameResolution in nameResolutions)
            {
                ExpandGroupResults groupResults = service.ExpandGroup(nameResolution.Mailbox.Address);
                foreach (EmailAddress member in groupResults.Members)
                {
                    Console.WriteLine(member.Name + " <" + member.Address + ">");
                }
            }
        }
    }
}

答案 1 :(得分:1)

EWS不适合这项工作。您需要查询ActiveDirectory。有关示例,请参阅http://www.infinitec.de/post/2005/02/How-to-get-the-Global-Address-List-programatically.aspx