【发布时间】:2011-06-13 06:56:05
【问题描述】:
我有一个用 C# 编写的 Outlook 插件。
我想知道如何或是否可以获取当前用户的电子邮件地址?
谢谢
【问题讨论】:
标签: c# .net exchange-server outlook-addin office-2007
我有一个用 C# 编写的 Outlook 插件。
我想知道如何或是否可以获取当前用户的电子邮件地址?
谢谢
【问题讨论】:
标签: c# .net exchange-server outlook-addin office-2007
在 VS 2010、.NET 4.0、Outlook 2010 中测试:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
【讨论】:
ActiveExplorer() 不是必需的,可以返回 null。摆脱它 - 使用this.Application.Session.CurrentUser.Address
使用Namespace.CurrentUser:http://msdn.microsoft.com/en-us/library/bb220041(v=office.12).aspx
【讨论】:
myEmailAddress = this.ActiveExplorer().Session.CurrentUser.EmailAddress; 或在此处尝试其他解决方案:social.msdn.microsoft.com/forums/en-US/vsto/thread/…
取决于“当前用户地址”的定义。
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)。
如果配置文件中有多个帐户,则可以通过多个帐户发送或接收电子邮件。在这种情况下使用MailItem.SendUsingAccount(返回Account 对象,可以为null - 在这种情况下使用Application.Session.CurentUser)。这对于接收、发送或正在撰写的电子邮件均有效(Application.ActiveInspector.CurrentItem 或 Application.ActiveExplorer.ActiveInlineResponse)。
可以使用Namespace.Accounts 集合(Application.Session.Accounts 访问给定配置文件中的所有帐户。可以使用Account.SmtpAddress 属性访问帐户的地址。
请注意,Outlook 对象模型仅公开邮件帐户。某些商店帐户(例如 PST)不在集合中,因为它们没有内在的用户身份,即使某些其他帐户(例如 POP3/SMTP)可以交付到该商店。如果要访问所有帐户,可以使用Redemption 及其RDOSession.Accounts 集合(RDOAccounts 对象)。
在扩展 MAPI 级别上,帐户通过 IOlkAccountManager 接口公开。如果您单击 IOlkAccountManager 按钮,您可以在OutlookSpy 中使用它。
PR_MAILBOX_OWNER_ENTRYID 属性仅由在线商店公开,它在缓存商店中不可用)。您可以解析 Exchange 存储条目 id 并从中提取 EX 类型地址。然后,您可以在给定 EX 地址的情况下构造 GAL 对象条目 ID。您还可以使用Redemption 及其RDOExchangeMailboxStore 对象及其Owner 属性访问店主。【讨论】:
如果您使用的是普通的 POP/IMAP 服务器,您将获得以下电子邮件地址: Application.Session.CurrentUser.AddressEntry.Address;
使用 Exchange Server,您可以通过以下方式获取电子邮件地址: Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
【讨论】:
试试outlookObject.ActiveExplorer().Session.CurrentUser.Address。在 VS10、Outlook 2007、.NET 4.0 上为我工作
【讨论】:
任何路过的人,我强烈建议使用Application.Session.CurrentUser.AddressEntry.Address
而不是任何使用
Application.ActiveExplorer().Session,
因为ActiveExplorer() 可能会返回NullReferenceException,例如在通过 Outlook 打开电子邮件时。
【讨论】: