2011-01-21 151 views

回答

5
+1

这就是VBA,而不是C#。我似乎无法找到在C# – electricsheep 2011-01-21 17:31:01

+4

你可以尝试`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

12

经测试,在VS 2010,.NET 4.0,展望2010年:

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

为什么不缩短到var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address?您还需要检查AddressEntry.GetExchangeUser是否有效 - 对于配置文件中没有Exchange的用户,GetExchangeUser将返回null。 – 2012-05-11 22:30:43

0

尝试outlookObject.ActiveExplorer().Session.CurrentUser.Address。通过打开电子邮件时为我工作在VS10,Outlook 2007中,.NET 4.0

0

任何人经过,我强烈建议使用 Application.ActiveExplorer().Session, 作为ActiveExplorer()可能会返回一个NullReferenceException使用Application.Session.CurrentUser.AddressEntry.Address ,而不是任何东西,例如外表。

2

如果您使用的是正常的POP/IMAP服务器,您将收到的电子邮件地址为: Application.Session.CurrentUser.AddressEntry.Address;

使用Exchange Server,您将收到电子邮件地址: Application.Session.CurrentUser.AddressEntry.GetExchangeUser()。PrimarySmtpAddress;

5

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

  1. 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地址,包括所有代理(别名)地址)。

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

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

在扩展MAPI级别上,帐户通过IOlkAccountManager接口公开。如果您单击IOlkAccountManager按钮,您可以在OutlookSpy中使用它。

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