How to get the email address of the current logged-in user?
Usually, the email address is the name assigned to Outlook Mail Folders.
So try this:
'~~> add these lines to your code
Dim olNS As Outlook.NameSpace
Dim olFol AS Outlook.Folder
Set olNS = OL.GetNamespace("MAPI")
Set olFol = olNS.GetDefaultFolder(olFolderInbox)
MsgBox olFol.Parent.Name '~~> most cases contains the email address
This is assuming your are using Early Bind with the object reference properly set.
Another way to access such info is directly use Namespace properties.
MsgBox olNS.Accounts.Item(1).DisplayName '~~> usually email address
MsgBox olNS.Accounts.Item(1).SmtpAddress '~~> email address
MsgBox olNS.Accounts.Item(1).UserName '~~> displays the user name
I hope any of the above somehow helps.
It all depends on the definition of "the current user address".
The address of the primary account in Outlook can be retrieved from
Appication.Session.CurrentUser
(returnsRecipient
object). UseRecipient.Address
property. Note however that for an Exchange account (Recipient.AddressEntry.Type == "EX"
) you will receive an EX type address. To retrieve the SMTP address, useRecipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
. Be prepared to handle nulls/exceptions in case of errors. This is what you most likely need in your particular case.
On the Extended MAPI level (C++ or Delphi), useIMAPISession::QueryIdentity
(you can test it in OutlookSpy (I am its author) - click IMAPISession button, then QueryIdentity). You can then read thePR_ADDRTYPE
property ("EX" vs "SMTP") andPR_EMAIL_ADDRESS
(whenPR_ADDRTYPE
= "SMTP") or (in case of Exchange)PR_SMTP_ADDRESS
(not guaranteed to be present) andPR_EMS_AB_PROXY_ADDRESSES
(multivalued property will Exchange addresses, including all proxy (alias) addresses).In case of multiple accounts in the profile, an email can be sent or received through multiple accounts. In that case use
MailItem.SendUsingAccount
(returnsAccount
object, can be null - in that case useApplication.Session.CurentUser
). This is valid both for received, sent or emails being composed (Application.ActiveInspector.CurrentItem
orApplication.ActiveExplorer.ActiveInlineResponse
).All accounts in a given profile can be accessed using the
Namespace.Accounts
collection(Application.Session.Accounts
). Account's address can be accessed usingAccount.SmtpAddress
property. Note that the Outlook Object Model only exposes mail accounts. Some store accounts (such as PST) are not in the collection since they do not have an intrinsic user identity even if some other accounts (such as POP3/SMTP) can deliver to that store. If you want to access all accounts, you can use Redemption (I am its author) and its RDOSession.Accounts collection (RDOAccounts object).
On the Extended MAPI level, the accounts are exposed through the IOlkAccountManager interface. You can play with it in OutlookSpy if you click the IOlkAccountManager button.In case of delegate Exchange stores, the store owner is not exposed through the Outlook Object Model. You can either use Extended MAPI (note that the
PR_MAILBOX_OWNER_ENTRYID
property is only exposed by the online store, it is not available in a cached store). You can parse the Exchange store entry id and extract the EX type address from it. You can then construct the GAL object entry id given the EX address. You can also access the store owner using Redemption and its RDOExchangeMailboxStore object and itsOwner
property.