2011-12-28 31 views
9

Tengo un complemento de VSTO Outlook 2007. Estoy tratando de obtener la dirección de correo electrónico del remitente cuando llegue un nuevo correo a Inbox.
para hacerlo utilizo el siguiente código:Outlook 2007 vsto complemento. Obtener la dirección del remitente de correo electrónico

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

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

El problema es cuando el correo electrónico proviene del mismo dominio, emailadress contiene direcciones LDAP como

/S = PRIMERA ENTIDAD/OU = Primer grupo administrativo/cn = Destinatarios/cn = Administrador

mientras que yo quiero obtener la dirección SMTP como

[email protected]

Mi pregunta es cómo conseguir que la dirección del remitente SMTP de correo electrónico de dominio interno?

P. S.
En Outlook 2010, este problema se puede resolver utilizando la propiedad Sender. Sin embargo, no se admite en 2007.

item.Sender.GetExchangeUser().PrimarySmtpAddress 
+0

Si está interesado, confirme para esto: http: //stackoverflow.com/documentation/outlook-addin/commit –

Respuesta

15

En Outlook 2007 puede hacerlo de esta manera:

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

¿Hay algún método similar para obtener la dirección del remitente en Visual Basic? – ASM2701

+1

Sí @ ASM2701, puede hacer exactamente lo mismo en VB.NET. La sintaxis de VB es diferente de la de C#, sin puntos y comas o llaves, pero deberías ser capaz de resolverlo sin grandes problemas. – GTG

+0

Si está interesado, confirme para esto: http: //stackoverflow.com/documentation/outlook-addin/commit –

1

Aquí estoy presentando un método que se puede utilizar para obtener la dirección de correo electrónico del remitente mediante el paso de una artículo de correo electrónico como referencia. El método en sí mismo decidirá si el tipo de dirección de correo electrónico del remitente es SMTP o Exchange. Si se trata de Exchange, convertirá la dirección de correo electrónico en SMTP. Aquí está el código.

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

Puede usar el inspector para obtener el correo electrónico actual de la siguiente manera.

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

obtendrá el remitente de correo electrónico en la variable senderEmail.

Cuestiones relacionadas