2013-12-21 88 views
0

我真的被困在這個問題中,搜索並沒有給我帶來太多好處。我發現的大部分答案都是讓聯繫人不添加它們或使用LDAP。以編程方式將聯繫人添加到通訊組列表

我已經能夠做的最好的是顯示你在那裏人們添加到通訊組列表窗口,但我不能這樣做,部分編程

這裏是我最好的嘗試:

Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application(); 
NameSpace oNS = oApp.GetNamespace("MAPI"); 
//Get Global Address List. 
AddressLists oDLs = oNS.AddressLists; 
AddressList oGal = oDLs["Global Address List"]; 
AddressEntries oEntries = oGal.AddressEntries; 
AddressEntry oDL = oEntries["MyDistributionList"]; 

//Get Specific Person 
SelectNamesDialog snd = oApp.Session.GetSelectNamesDialog(); 
snd.NumberOfRecipientSelectors = OlRecipientSelectors.olShowTo; 
snd.ToLabel = "D/L"; 
snd.ShowOnlyInitialAddressList = true; 
snd.AllowMultipleSelection = false; 
//snd.Display(); 
AddressEntry addrEntry = oDL; 
if (addrEntry.AddressEntryUserType == Microsoft.Office.Interop.Outlook.OlAddressEntryUserType.olExchangeDistributionListAddressEntry) 
{ 
    ExchangeDistributionList exchDL = addrEntry.GetExchangeDistributionList(); 
    AddressEntries addrEntries = exchDL.GetExchangeDistributionListMembers(); 

    string name = "John Doe"; 
    string address = "[email protected]"; 
    exchDL.GetExchangeDistributionListMembers().Add(OlAddressEntryUserType.olExchangeUserAddressEntry.ToString(), name, address); 
    exchDL.Update(Missing.Value); 
} 

使用這個我可以訪問分發名單,但我得到「書籤無效」的

exchDL.GetExchangeDistributionListMembers().Add(OlAddressEntryUserType.olExchangeUserAddressEntry.ToString(), name, address); 

線異常。

我有權訪問上述列表。

編輯: Example

+0

您是否正在嘗試將聯繫人添加到GAL分配或聯繫人文件夾中的DL? –

+0

@DmitryStreblechenko GAL – AngelicCore

回答

2

的事情是,當你使用Outlook API,你使用它的功能作爲一個用戶,而不是作爲管理員。
不止於此,您只能通過Outlook UI執行您可以執行的操作。

Outlook不允許您修改通訊組列表,因此您將無法使用Outlook API執行此操作。

有2點可能的方式來做到這一點:

  1. 使用NetApi的功能NetGroupAddUserNetLocalGroupAddMembers,取決於組是否是本地或全局組。這將需要使用P/Invoke導入這些函數,並且不適用於通用組。

2.使用LDAP查找您需要的組,並添加您想要的用戶。這可以通過使用System.DirectoryServices命名空間這樣進行:

using(DirectoryEntry root = new DirectoryEntry("LDAP://<host>/<DC root DN>")) 
using(DirectorySearcher searcher = new DirectorySearcher(root)) 
{ 
    searcher.Filter = "(&(objName=MyDistributionList))"; 
    using(DirectoryEntry group = searcher.findOne()) 
    { 
     searcher.Filter = "(&(objName=MyUserName))"; 
     using(DirectoryEntry user = searcher.findOne()) 
     { 
      group.Invoke("Add", user.Path); 
     } 
    } 
} 

這些只是包裝舊的COM接口ADSI,這就是爲什麼我用group.Invoke()。它需要多一點練習,但比NetApi功能強大得多。

+0

@jimbifd但我可以使用Outlook來做到這一點。 :) – AngelicCore

+0

@AngelicCore對不起,我想我錯過了。你還可以通過Outlook管理GAL,還是隻管你的個人聯繫人? – Jimbidf

+0

@jimbifd我可以通過全球通訊組列表訪問。除此之外,我只能管理我的個人物品(如預期的那樣)。 PS:要編輯Q – AngelicCore

相關問題