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

时间:2011-01-21 16:59:05

标签: c# .net exchange-server outlook-addin office-2007

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

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

由于

6 个答案:

答案 0 :(得分:14)

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

var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;

答案 1 :(得分:7)

答案 2 :(得分:4)

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

  1. 可以从Appication.Session.CurrentUser(返回Recipient对象)检索Outlook中主帐户的地址。使用Recipient.Address属性。但请注意,对于Exchange帐户(Recipient.AddressEntry.Type == "EX"),您将收到EX类型的地址。要检索SMTP地址,请使用Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress。准备好在出现错误时处理空值/异常。
  2. 在扩展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地址,包括所有代理(别名)地址)。

    1. 如果个人资料中有多个帐户,则可以通过多个帐户发送或接收电子邮件。在这种情况下,使用MailItem.SendUsingAccount(返回Account对象,可以为null - 在这种情况下使用Application.Session.CurentUser)。这对于收到,发送或撰写的电子邮件(Application.ActiveInspector.CurrentItemApplication.ActiveExplorer.ActiveInlineResponse)都有效。

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

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

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

答案 3 :(得分:2)

如果您使用的是普通的POP / IMAP服务器,则会获得以下电子邮件地址: Application.Session.CurrentUser.AddressEntry.Address;

使用Exchange Server,您将获得以下电子邮件地址: Application.Session.CurrentUser.AddressEntry.GetExchangeUser()PrimarySmtpAddress;

答案 4 :(得分:0)

试试outlookObject.ActiveExplorer().Session.CurrentUser.Address。在VS10,Outlook 2007,.NET 4.0上为我工作

答案 5 :(得分:0)

任何路过的人,我强烈建议使用Application.Session.CurrentUser.AddressEntry.Address 而不是任何使用 Application.ActiveExplorer().Session,  因为ActiveExplorer()可能会返回NullReferenceException,例如在通过Outlook打开电子邮件时。