vba - 如何根据Windows登录名使用VBA获取电子邮件地址?

标签 vba ms-access ldap

如何使用 VBA 根据 Windows 用户名获取网络上用户的电子邮件地址?

我有一个日志文件,其中包含启动此 Access 数据库的每个人的用户名。用户名是在启动数据库时从 Environ("USERNAME") 生成的。我需要向所有最近的用户发送一封电子邮件。

我不需要它来返回当前用户的电子邮件地址,也不需要代码来发送电子邮件。

我想知道是否可以使用 LDAP,但我的示例仅适用于当前登录的用户。还有别的办法吗?


Function GetEmailAddress(Optional strUserName As String = "") As String
' Get user's email address from LDAP

    Dim sysInfo         As Object
    Dim oUser           As Object

    If strUserName = "" Then
        ' No name was passed in.  Get it for the current user.
        strUserName = Environ("USERNAME")
    End If

    ' How I can I use strUserName to get the email address?
    ' The LDAP query below only works for the current logged in user.

    Set sysInfo = CreateObject("ADSystemInfo")
    Set oUser = GetObject("LDAP://" & sysInfo.UserName & "")

    Debug.Print "Display Name: "; Tab(20); oUser.Get("DisplayName")
    Debug.Print "Email Address: "; Tab(20); oUser.Get("mail")
    Debug.Print "Computer Name: "; Tab(20); sysInfo.ComputerName
    Debug.Print "Site Name: "; Tab(20); sysInfo.SiteName
    Debug.Print "Domain DNS Name: "; Tab(20); sysInfo.DomainDNSName

    GetEmailAddress = oUser.Get("mail")

    Set sysInfo = Nothing
    Set oUser = Nothing
End Function

最佳答案

就我个人而言,我使用以下函数,尽管有很多可能性。

Public Function GetMailAddress(strUsername As String) As String
    Dim cmd As New ADODB.Command
    Dim cn As New ADODB.Connection
    Dim rs As ADODB.Recordset
    cn.Open "Provider=ADsDSOObject;"
    cmd.CommandText = "<LDAP://dc=MyCompany,dc=intranet>;(&(objectCategory=User)(CN=" & strUsername & "));mail;subtree"
    cmd.ActiveConnection = cn
    Set rs = cmd.Execute
    GetMailAddress = rs.Fields(0).Value
End Function

当然,您需要填写 LDAP 服务器的有效 DC 值。

关于vba - 如何根据Windows登录名使用VBA获取电子邮件地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57486049/

相关文章:

Excel VBA - 在多列上排序后取消选择范围

java - 如何将 Access 数据库共享到不同的 PC 上以用于 Java 桌面应用程序?

ms-access - Access 2007 : Hide Data Labels on Chart Object via vba with 0 values?

java - 使用 Java 和 LDAP 将用户添加到 AD LDS (ADAM)

java - 如何使用 Spring Ldap 模板更新密码?

vb.net - Outlook ReportItem.Body返回某些用户的困惑编码

vba - 如何将一列中的数据拆分为两个单独的列?

ms-access - Microsoft Access 中数据的运行时排序

php - Symfony:针对 LDAP 服务器对用户进行身份验证,但仅当用户名位于自定义数据库表中时才允许登录

ms-access - 在 IIF 语句中计算 NULL 时出现问题 (Access)