c# com outlook office-interop

c# - Agregar contacto a la lista de distribución mediante programación



com outlook (1)

El hecho es que cuando usa la API de Outlook, usa su funcionalidad como usuario, no como administrador.
Más que eso, solo puedes hacer cosas que puedes hacer a través de la interfaz de usuario de Outlook.

Outlook no le permite modificar listas de distribución, por lo que no podrá hacerlo utilizando la API de Outlook.

Hay 2 formas posibles de hacerlo:

  1. Utilice las funciones de NetGroupAddUser o NetLocalGroupAddMembers , dependiendo de si el grupo es un grupo local o global. Esto requerirá importar esas funciones con P / Invoke y no funcionará en grupos universales.

2. Use LDAP para encontrar el grupo que necesita y agregue los usuarios que lo desee. Esto se puede hacer usando el espacio de nombres System.DirectoryServices como este:

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); } } }

Estos simplemente envuelven las viejas interfaces COM ADSI, es por eso que uso group.Invoke (). Se necesita un poco más de práctica, pero es mucho más potente que las funciones de NetApi.

Estoy realmente atrapado en este problema y la búsqueda no me dio mucho. La mayoría de las respuestas que encontré hacen que los Contactos no los agreguen o que usen LDAP.

Lo mejor que he podido hacer es mostrar la ventana en la que agrega personas a la lista de distribución, pero no puedo hacer esa parte mediante programación

Este es mi mejor intento:

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); }

Al usar esto, puedo acceder a la lista de distribución pero obtengo la excepción "El marcador no es válido" en el

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

línea.

Tengo acceso a dicha lista.

EDITAR: