【问题标题】:How to capture the user's Outlook email address?如何捕获用户的 Outlook 电子邮件地址?
【发布时间】:2021-07-02 07:43:56
【问题描述】:

我在 Excel 中创建了一个 VBA 函数来识别当前用户的电子邮件地址。

Public Function UserName()

Dim OL, olAllUsers, oExchUser, oentry, myitem As Object
Dim User As String

Set OL = CreateObject("outlook.application")
Set olAllUsers = OL.Session.AddressLists.Item("All Users").AddressEntries

User = OL.Session.CurrentUser.Name

Set oentry = olAllUsers.Item(User)

Set oExchUser = oentry.GetExchangeUser()

UserName = oExchUser.PrimarySmtpAddress

End Function

对于大多数用户来说,这会显示他们的电子邮件地址(例如 john_doe@generic.com)。

对于某些它不会更新默认值,这是我自己的电子邮件,因为代码在我尝试时成功执行。

【问题讨论】:

  • 如果地址条目已经是 SMTP 地址或分发列表,则 GetExchangeUser 将无法正确获取。这里的一些答案可能会有所帮助,尽管它需要从 Outlook 移植到 Excel 代码:stackoverflow.com/questions/12641704/…
  • 其中一个链接似乎有一个基于 Excel 的答案:stackoverflow.com/questions/31161726/…
  • 是的,看起来这正是问题所在。我在其中一个 cmets 中尝试了使用 Account.SmtpAddress 协议的模型,它似乎对所有受影响的用户都运行良好。非常感谢!

标签: excel vba outlook


【解决方案1】:

您可以使用Account.SmtpAddress 属性来获取 SMTP 电子邮件地址。它返回一个字符串,表示 Account 的简单邮件传输协议 (SMTP) 地址。

Dim UserMailAddress As String
Set UserMailAddress = OL.Session.CurrentUser.SmtpAddress

如果您获得类似 Exchange 的电子邮件地址,您可以将其转换为 SMTP 电子邮件地址。请参阅HowTo: Convert Exchange-based email address into SMTP email address 了解更多信息。

【讨论】:

  • 是的,看起来隔离 SMTP 电子邮件地址是我需要做的。谢谢!
【解决方案2】:

如果所有用户的电子邮件地址都是不变的,那么可以说 gmail.com 是不变的。而系统的user_name就是user_id,那么你可以试试这样的。

Dim User As String
user = environ("Username")
email = user & "gmail.com"

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多