获取Outlook 2007中当前用户的电子邮件地址
经测试,在VS 2010,.NET 4.0,展望2010年:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
为什么不缩短到var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address?您还需要检查AddressEntry.GetExchangeUser是否有效 - 对于配置文件中没有Exchange的用户,GetExchangeUser将返回null。 – 2012-05-11 22:30:43
尝试outlookObject.ActiveExplorer().Session.CurrentUser.Address
。通过打开电子邮件时为我工作在VS10,Outlook 2007中,.NET 4.0
任何人经过,我强烈建议使用 Application.ActiveExplorer().Session
, 作为ActiveExplorer()
可能会返回一个NullReferenceException
使用Application.Session.CurrentUser.AddressEntry.Address
,而不是任何东西,例如外表。
如果您使用的是正常的POP/IMAP服务器,您将收到的电子邮件地址为: Application.Session.CurrentUser.AddressEntry.Address;
使用Exchange Server,您将收到电子邮件地址: Application.Session.CurrentUser.AddressEntry.GetExchangeUser()。PrimarySmtpAddress;
取决于“当前用户地址”的定义。
- Outlook的主帐户的地址可以从
Appication.Session.CurrentUser
(返回Recipient
对象)进行检索。使用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地址,包括所有代理(别名)地址)。
如果配置文件中有多个帐户,则可以通过多个帐户发送或接收电子邮件。在这种情况下,使用
MailItem.SendUsingAccount
(返回Account
对象,可以为空 - 在这种情况下使用Application.Session.CurentUser
)。这对收到,发送或正在撰写的电子邮件都有效(Application.ActiveInspector.CurrentItem
或Application.ActiveExplorer.ActiveInlineResponse
)。给定配置文件中的所有帐户都可以使用
Namespace.Accounts
集合(Application.Session.Accounts
访问)。帐户的地址可以使用Account.SmtpAddress
属性进行访问。 请注意,Outlook对象模型仅公开邮件帐户。某些商店帐户(如PST)不在收藏夹中,因为即使其他某些帐户(如POP3/SMTP)可以将其传送到该商店,它们也没有固有的用户身份。如果您想访问所有帐户,则可以使用Redemption及其RDOSession。帐户收集(RDOAccounts对象)。
在扩展MAPI级别上,帐户通过IOlkAccountManager接口公开。如果您单击IOlkAccountManager按钮,您可以在OutlookSpy中使用它。
- 在委托Exchange存储的情况下,存储所有者不会通过Outlook对象模型公开。您可以使用扩展MAPI(请注意,PR_MAILBOX_OWNER_ENTRYID属性仅由在线商店公开,但在缓存存储中不可用)。您可以解析Exchange存储条目标识并从中提取EX类型地址。然后,您可以构造给定EX地址的GAL对象条目标识。您还可以使用Redemption及其RDOExchangeMailboxStore对象及其
Owner
属性访问店主。
这就是VBA,而不是C#。我似乎无法找到在C# – electricsheep 2011-01-21 17:31:01
你可以尝试`myEmailAddress = this.ActiveExplorer()。Session.CurrentUser.EmailAddress;`或尝试其他解决方案在这里:http://social.msdn.microsoft.com/forums/en- US/vsto/thread/d2d9bf23-e27f-4f30-9199-42833d6919a4/ – acconrad 2011-01-21 17:45:27