Нужна помощь в доступе к динамическим спискам рассылки с использованием C # и ADWS - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я управляю программой, которая анализирует данные электронной почты.Одна из проблем, возникших на ранних этапах разработки, заключалась в том, что запись в полях TO CC или BCC электронной почты часто представляла собой не реальный адрес электронной почты, а какой-либо адрес списка рассылки.Поскольку приложению необходимо точно фиксировать количество людей, которым отправляется электронное письмо, необходимо расширить списки рассылки, чтобы я мог записать конечное число получателей, которым отправляется электронное письмо.Я легко справился с обычными списками рассылки, но столкнулся с проблемой динамических списков рассылки

Я создал рабочий режим, который может это сделать.Вот код:

    /// <summary>
    /// Get the List of A dynamic distribution Group in Key Value Pairs 
    /// the key is the CN
    /// the value is the filter for the membership of that group
    /// </summary>
    /// <returns>Dictionary of strings </returns>
    public List<DistributionList> GetDynamicDistributionLists(string strEmailAddress)
    {
        List<DistributionList> distributionLists = new List<DistributionList>();
        DomName = "dc=" + Settings.ImpersonatedUserDomain.Replace(".", ",dc=");

        using(var group = new DirectoryEntry("GC://" + DomName))
        {

            using(var searchRoot = new DirectoryEntry("GC://" + Settings.GlobalCatalogServer + "/" + DomName))
            using(var searcher = new DirectorySearcher(searchRoot, "(&(ObjectClass=msExchDynamicDistributionList)(proxyAddresses=smtp:" + strEmailAddress.Trim() + "))"))
            using(var results = searcher.FindAll())
            {
                foreach(SearchResult result in results)
                {
                    if(result.Properties.Contains("cn") && result.Properties.Contains("msExchDynamicDLFilter"))
                    {
                        DistributionList dl = new DistributionList();

                        dl.DType = DLT.DDL;
                        dl.CN = result.Properties["cn"][0].ToString();
                        dl.FILORDN = result.Properties["msExchDynamicDLFilter"][0].ToString();

                        distributionLists.Add(dl);
                    }
                }
            }

        }

        return distributionLists;

    }

Это работает, но мне нужно открыть VPN на сервере глобального каталога, если я хочу запустить этот код удаленно на сайт.Иногда я хочу запускать удаленно, и весь мой другой код может выполняться удаленно, используя EWS без необходимости открытия VPN.Поэтому я пытаюсь найти способ доступа к серверу с помощью ADWS.

Может ли кто-нибудь помочь мне найти код, который позволил бы мне запускать вышеуказанный код с использованием ADWS, поэтому мне не нужно открывать VPN.

Спасибо,

Siv

1 Ответ

0 голосов
/ 22 ноября 2018

Итак, я предполагаю, что брандмауэр блокирует доступ из внешнего мира, что понятно.Когда вы используете «GC: //», по умолчанию используется порт 3268.Вы можете попробовать другие порты, чтобы увидеть, открыты ли они:

  • 389: порт по умолчанию при использовании LDAP://
  • 636: LDAP через SSL.Вы используете его как LDAP://domain.com:636
  • 3269: GC over SSL.Вы используете его как LDAP://domain.com:3269

Возможно, открыто либо 636, либо 3269, но могут возникнуть сложности в зависимости от используемого сертификата SSL.

Если все онизаблокирован, тогда да, вам придется использовать ADWS.Как вы используете это из .NET очень отличается.Здесь есть описание: http://samirvaidya.blogspot.com/2012/06/using-active-directory-web-services-in.html

Но в основном вы создаете ссылку на службу в своем проекте и используете ее как веб-службу, а не DirectoryEntry.

...