Outlook 2007 vsto надстройка.Получить адрес электронной почты отправителя - PullRequest
10 голосов
/ 28 декабря 2011

У меня есть надстройка VSTO Outlook 2007. Я пытаюсь получить адрес электронной почты отправителя при поступлении нового сообщения в папку «Входящие».
Для этого я использую следующий код:

void inboxItems_ItemAdd(object Item)
{     
    Outlook.MailItem mailItem = Item as Outlook.MailItem;

    if (mailItem != null)
        string emailAdress = mailItem.SenderEmailAddress;  
}

Проблема в том, что, когда электронная почта приходит с одного и того же домена, emailAdress содержит LDAP-адрес, такой как

/ O = ПЕРВАЯ ОРГАНИЗАЦИЯ / OU = ПЕРВАЯ АДМИНИСТРАТИВНАЯ ГРУППА / CN = ПОЛУЧАТЕЛИ / CN = АДМИНИСТРАТОР

пока я хочу получить SMTP-адрес типа

administrator@orgname.com

У меня вопрос, как получить SMTP-адрес отправителя электронной почты из внутреннего домена?

P. С.
В Outlook 2010 эту проблему можно решить с помощью свойства Sender. Но это не поддерживается в 2007 году.

item.Sender.GetExchangeUser().PrimarySmtpAddress

Ответы [ 3 ]

15 голосов
/ 28 декабря 2011

В Outlook 2007 вы можете сделать это так:

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;
}
1 голос
/ 24 февраля 2016

Здесь я представляю метод, который можно использовать для получения адреса электронной почты отправителя путем передачи элемента электронной почты в качестве ссылки. Сам метод будет определять, является ли тип адреса электронной почты отправителя SMTP или Exchange. Если это Exchange, он преобразует адрес электронной почты в SMTP. Вот код

    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);
        }
    }
0 голосов
/ 26 августа 2017

Вы можете использовать инспектор для получения текущей электронной почты следующим образом.

 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;
                }
             }

вы получите сообщение электронной почты отправителя в переменной senderEmail.

...