获取Outlook 2007中当前用户的电子邮件地址

ele*_*eep 19 .net c# exchange-server office-2007 outlook-addin

我有一个用C#编写的Outlook添加.

我想知道如何获得当前用户的电子邮件地址?

谢谢

Lee*_*som 14

在VS 2010,.NET 4.0,Outlook 2010中测试:

var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不缩短它到var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address?您还需要检查AddressEntry.GetExchangeUser是否有效 - 对于配置文件中没有Exchange的用户,GetExchangeUser将返回null. (3认同)

acc*_*rad 7

使用Namespace.CurrentUser:http://msdn.microsoft.com/en-us/library/bb220041(v = office.12).aspx

  • 您可以尝试`myEmailAddress = this.ActiveExplorer().Session.CurrentUser.EmailAddress;`或尝试其他解决方案:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/d2d9bf23-e27f -4f30-9199-42833d6919a4 / (4认同)

Dmi*_*nko 6

取决于“当前用户地址”的定义。

  1. 可以从Appication.Session.CurrentUser(返回Recipient对象)中检索 Outlook 中主帐户的地址。使用Recipient.Address财产。但是请注意,对于 Exchange 帐户 ( Recipient.AddressEntry.Type == "EX"),您将收到一个 EX 类型的地址。要检索 SMTP 地址,请使用Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress. 准备好在出现错误时处理空值/异常。

在扩展 MAPI 级别(C++ 或 Delphi)上,使用IMAPISession::QueryIdentity(您可以在OutlookSpy 中对其进行测试- 单击 IMAPISession 按钮,然后单击 QueryIdentity)。然后,您可以读取PR_ADDRTYPE属性(“EX”与“SMTP”)和PR_EMAIL_ADDRESS(当PR_ADDRTYPE=“SMTP”)或(在 Exchange 的情况下)PR_SMTP_ADDRESS(不保证存在)和PR_EMS_AB_PROXY_ADDRESSES(具有 Exchange 地址的多值属性,包括所有代理(别名) ) 地址、EX 和 SMTP)。

  1. 如果配置文件中有多个帐户,则可以通过多个帐户发送或接收电子邮件。在这种情况下 use MailItem.SendUsingAccount(返回Account对象,可以为 null - 在这种情况下 use Application.Session.CurentUser)。这对于接收、发送或正在编写的电子邮件(Application.ActiveInspector.CurrentItemApplication.ActiveExplorer.ActiveInlineResponse)均有效。

  2. 可以使用Namespace.Accounts集合访问给定配置文件中的所有帐户(Application.Session.Accounts)。可以使用Account.SmtpAddress属性访问帐户的地址。请注意,Outlook 对象模型仅公开邮件帐户。某些商店帐户(例如 PST)不在集合中,因为即使某些其他帐户(例如 POP3/SMTP)可以传送到该商店,它们也没有固有的用户身份。如果要访问所有帐户,可以使用Redemption及其RDOSessionAccounts集合(RDOAccounts对象)。

在扩展 MAPI 级别,帐户通过IOlkAccountManager接口公开。如果单击 IOlkAccountManager 按钮,则可以在OutlookSpy 中使用它。

  1. 在委托 Exchange 存储的情况下,存储所有者不会通过 Outlook 对象模型公开。您可以使用扩展 MAPI(请注意,该PR_MAILBOX_OWNER_ENTRYID属性仅由在线商店公开,在缓存商店中不可用)。您可以解析 Exchange 存储条目 ID 并从中提取 EX 类型地址。然后,您可以根据 EX 地址构造 GAL 对象条目 ID。您还可以使用Redemption及其RDOExchangeMailboxStore对象及其Owner属性访问商店所有者。