我有一个用C#编写的Outlook添加。
我想知道如何获得当前用户的电子邮件地址?
由于
答案 0 :(得分:14)
在VS 2010,.NET 4.0,Outlook 2010中测试:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
答案 1 :(得分:7)
使用Namespace.CurrentUser
:http://msdn.microsoft.com/en-us/library/bb220041(v=office.12).aspx
答案 2 :(得分:4)
取决于“当前用户地址”的定义。
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地址,包括所有代理(别名)地址)。
如果个人资料中有多个帐户,则可以通过多个帐户发送或接收电子邮件。在这种情况下,使用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。帐户集合(RDOAccounts对象)。
在扩展MAPI级别,帐户通过IOlkAccountManager界面公开。如果单击IOlkAccountManager按钮,则可以在OutlookSpy中使用它。
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打开电子邮件时。