【问题标题】:Looking for help accessing Dynamic Distribution Lists using C# and ADWS寻求使用 C# 和 ADWS 访问动态分发列表的帮助
【发布时间】:2019-04-25 03:49:10
【问题描述】:

我目前管理一个分析电子邮件数据的程序。开发此功能时早期出现的一个问题是,电子邮件的 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

【问题讨论】:

    标签: active-directory exchange-server exchangewebservices


    【解决方案1】:

    所以我假设防火墙阻止了来自外部世界的访问,这是可以理解的。当您使用“GC://”时,默认使用端口 3268。您可以尝试其他端口,看看它们是否打开:

    • 389:使用LDAP://时的默认端口
    • 636:基于 SSL 的 LDAP。你像LDAP://domain.com:636一样使用它
    • 3269:通过 SSL 进行 GC。你像LDAP://domain.com:3269一样使用它

    有可能 636 或 3269 是开放的,但根据使用的 SSL 证书,可能会出现复杂情况。

    如果所有这些都被阻止,那么是的,您必须使用 ADWS。从 .NET 使用它的方式非常不同。这里有一篇文章:http://samirvaidya.blogspot.com/2012/06/using-active-directory-web-services-in.html

    但基本上,您在项目中创建一个服务引用并像 Web 服务一样使用它,而不是使用 DirectoryEntry

    【讨论】:

    • 加布里埃尔,感谢您的回复。这是一个可以被许多客户使用的通用程序,所以我需要一种方法,允许我使用可以放入设置程序中的参数进行连接,因此我不能对单个服务器执行高度特定的操作,它必须工作只要我可以存储允许我访问它的用户名和密码,就可以针对任何想要连接的服务器。所以我不确定这是否可行。在发帖之前我确实读过那篇文章。
    • 不幸的是,没有一种方法可以同时用于 LDAP 和 ADWS。如果你想同时支持两者,你将需要两个实现。您始终可以将实现隐藏在您自己的类后面,例如拥有一个您自己定义的 DistributionList 类,并在后台通过 LDAP 或 ADWS 填充它,具体取决于您的配置文件的内容。
    • 但是尝试其他 LDAP 端口。也许其中之一是开放的。如果是这样,您可以将端口保留为配置设置并仍然使用DirectoryEntry
    • Gabriel,我不确定我想使用什么,只要我可以将动态通讯组扩展到其组成的电子邮件地址,我会使用远程工作的任何东西,所以如果你有想法关于如何实现这一点,我全神贯注。我只是想摆脱对 VPN 访问全局目录服务器的需要,以便能够像现在这样。
    • 在大多数情况下,我将与可能希望我远程运行我的应用程序并为他们收集电子邮件信息的企业客户打交道。他们不希望我要求他们打开端口来做我怀疑的事情。因此,我正在寻找一种技术,该技术使用可能像 443 一样开放的技术,用于像 EWS 这样的 https 东西。我没有任何使用 ADWS 的经验,并且我假设您可以通过该端口访问 AD 服务器,但我找不到任何关于如何为我所追求的目的执行此操作的好的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2011-06-22
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多