Obtain SMTP Address using CDO in an un-managed environment
You can use the AddressEntry.Fields(PR_SMTP_ADDRESS) method where PR_SMTP_ADDRESS is 0x39FE001E.
Here are two examples of it:
' MAPI property tag for SMTP address
' Get first message from inbox
Set objFolder = objSession.Inbox
Set objMessages = objFolder.Messages
Set objMessage = objMessages.GetFirst()
' Get address
Set objAddressEntry = objMessage.Sender
strEMailAddress = objAddressEntry.Address
' Check if it is an Exchange object
If Left(strEMailAddress, 3) = "/o=" Then
' Get the SMTP address
strAddressEntryID = objAddressEntry.ID
'strEMailAddress = objSession.GetAddressEntry(strAddressEntryID).Fields(CdoPR_EMAIL).Value
'strEMailAddress = objSession.GetAddressEntry(strAddressEntryID).Fields(CdoPR_EMAIL).Value
strEMailAddress = objSession.GetAddressEntry(strAddressEntryID).Fields(g_PR_SMTP_ADDRESS_W).Value
strEMailAddress = objSession.GetAddressEntry(strAddressEntryID).Fields(g_PR_SMTP_ADDRESS_W).Value
End If
' Display the SMTP address of current user
MsgBox "SMTP address of current user: " & strEMailAddress
--------------------------------
In c# you can access it similarly like this:
MAPI.Session mysession = CreateObject("MAPI.Session") as MAPI.Session;
mysession.MAPIOBJECT = objNameSpace.Session.MAPIOBJECT;
MAPI.AddressEntry entries = mysession.CurrentUser as MAPI.AddressEntry;
string correo = entries.Address.ToString();
string entryID = string.Empty;
int id = int.Parse("39FE001F",System.Globalization.NumberStyles.HexNumber,null);
if (correo.Substring(0, 3) == "/o=")
{
entryID = entries.ID.ToString();
User = ((((mysession.GetAddressEntry(entryID) as MAPI.AddressEntry)).Fields as MAPI.Fields).get_Item(id, null) as MAPI.Field).Value.ToString();
}
else
User = correo;
MFCMapi - https://mfcmapi.codeplex.com/ is a great tool to use to understand the exchange store and message attributes.
Go ahead and have a play