获取Outlook 2007中当前用户的电子邮件地址
我有一个用C#编写的Outlook添加。
我想知道如何获得当前用户的电子邮件地址?
谢谢
使用Namespace.CurrentUser
: http : //msdn.microsoft.com/en-us/library/bb220041( Namespace.CurrentUser
= office.12).aspx
在VS 2010,.NET 4.0,Outlook 2010中测试:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
取决于“当前用户地址”的定义。
- 可以从
Appication.Session.CurrentUser
(返回Recipient
对象)检索Outlook中主帐户的地址。 使用Recipient.Address
属性。 但请注意,对于Exchange帐户(Recipient.AddressEntry.Type == "EX"
),您将收到EX类型的地址。 要检索SMTP地址,请使用Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
。 准备好在出现错误时处理空值/exception。
在扩展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地址,包括所有代理(别名)地址)。
-
如果配置文件中有多个帐户,则可以通过多个帐户发送或接收电子邮件。 在这种情况下,使用
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中使用它。
- 如果是委派Exchange存储,则不会通过Outlook对象模型公开存储所有者。 您可以使用扩展MAPI(请注意,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()
,因为ActiveExplorer()
可能会返回NullReferenceException
,例如在通过Outlook打开电子邮件时。