搜索用户主要收件箱的电子邮件宏;没有硬编码他们的地址

时间:2016-06-16 15:28:00

标签: vba outlook outlook-vba

我正在开发一个邮件宏,许多用户将在Outlook中运行。目前我使用以下方法搜索我的收件箱...

Set objNamespace = Application.GetNamespace("MAPI")
'Replace line below with code that sets olShareName equal to the current 'outlook user's primary e-mail account.
Set olShareName = objNamespace.CreateRecipient("rpullman@dogs.com")
Set objFolder = objNamespace.GetSharedDefaultFolder(olShareName, olFolderInbox)
Set DestFolder = objNamespace.GetSharedDefaultFolder(olShareName, olFolderToDo)

strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%Dogs Secretly Control the World%'"

Set filteredItems = objFolder.Items.Restrict(strFilter)

我想让这段代码可移植,因为olShareName变量将被设置为运行宏的主要电子邮件地址的任何人。

例如,如果我的同事使用这个宏,并且他们有以下电子邮件地址(通过outlook访问):bailey@dogs.com和molly@dogs.com,他们应该能够运行它而无需键入对代码的任何修改。

显然,我可以使用输入框并让他们输入他们的电子邮件地址,但我想避免这种情况。

1 个答案:

答案 0 :(得分:2)

使用NameSpace.CurrentUser属性获取当前用户的Recipient对象。这将返回与活动Outlook配置文件中的默认帐户关联的地址。如果这是Exchange帐户,则需要访问Recipient.AddressEntry.GetExchangeUser()以获取ExchangeUser.PrimarySMTPAddress。虽然您确实只需要将Recipient对象用作NameSpace.GetSharedDefaultFolder的参数。

如果您需要该用户别名的地址,那么我认为您需要直接使用MAPI(或Redemption)。但是,如果要访问配置文件中配置的其他帐户的电子邮件地址,则可以循环访问NameSpace.Accounts并检查Account.SmtpAddress。