Outlook 2007 vsto add-in. Get email sender address

这一生的挚爱 提交于 2019-11-30 18:43:12

In Outlook 2007 you can do it like this:

private string GetSmtpAddress(Outlook.MailItem oItem)
{
    Outlook.Recipient recip;
    Outlook.ExchangeUser exUser;
    string sAddress;

    if (oItem.SenderEmailType.ToLower() == "ex")
    {
        recip = Globals.ThisAddIn.Application.GetNamespace("MAPI").CreateRecipient(oItem.SenderEmailAddress);
        exUser = recip.AddressEntry.GetExchangeUser();
        sAddress = exUser.PrimarySmtpAddress;
    }
    else
    {
        sAddress = oItem.SenderEmailAddress.Replace("'", "");
    }
    return sAddress;
}

Here I am presenting a method that can be used to get sender's email address by passing an email item as a reference. The method it self will decide weather the sender's email address type is SMTP or Exchange. If it is Exchange, it will convert the email address into SMTP. Here is the code.

    internal static string GetSenderEmailAddress(ref Outlook.MailItem oM)
    {
        Outlook.PropertyAccessor oPA = null;
        Outlook.AddressEntry oSender = null;
        Outlook.ExchangeUser oExUser = null;

        string SenderID;
        string senderEmailAddress;

        try
        {                
            if (oM.SenderEmailAddress.Contains("@") && oM.SenderEmailAddress.Contains(".com")) //Handing smtp email addresses
            {
                senderEmailAddress = oM.SenderEmailAddress;
            }
            else //Handing exchange email addresses
            {
                // Create an instance of PropertyAccessor 
                oPA = oM.PropertyAccessor;
                // Obtain PidTagSenderEntryId and convert to string 
                SenderID = oPA.BinaryToString(oPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0C190102"));
                // Obtain AddressEntry Object of the sender 
                oSender = Globals.ObjNS.GetAddressEntryFromID(SenderID);

                oExUser = oSender.GetExchangeUser();
                senderEmailAddress = oExUser.PrimarySmtpAddress;
            }
            Debug.DebugMessage(3, "OutlookHelper : GetSenderEmailAddress() : Completed");
            return senderEmailAddress;
        }
        catch (Exception ex)
        {
            MessageBox.Show( ex.Message);
            return null;
        }
        finally
        {
            if (oExUser != null) Marshal.ReleaseComObject(oExUser);
            if (oSender != null) Marshal.ReleaseComObject(oSender);
            if (oPA != null) Marshal.ReleaseComObject(oPA);
        }
    }

You can use inspector to get current email as follow.

 Outlook.Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();
            if (inspector != null)
            {
                Outlook.MailItem  mi = inspector.CurrentItem as Outlook.MailItem;

              //Then identify whether email sender is exchange user or normal user
               string senderEmail=null;
               if (mi.SenderEmailType == "EX")
                {
                senderEmail = mi.Sender.GetExchangeUser().PrimarySmtpAddress;                    
                 }
              else
                {
                 senderEmail=mi.SenderEmailAddress;
                }
             }

you will get sender email in senderEmail variable.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!