Compartir a través de


Obtener la dirección SMTP del remitente de un elemento de correo.

En este ejemplo se obtiene la dirección del protocolo simple de transferencia de correo (SMTP) del remitente de un elemento de correo.

Ejemplo

Para determinar la dirección SMTP de un elemento de correo recibido, use la propiedad SenderEmailAddress del objeto MailItem. Pero, si el remitente es interno a su organización, SenderEmailAddress no devuelve una dirección SMTP y debe usar el objeto PropertyAccessor para devolver la dirección SMTP del remitente.

En el ejemplo siguiente, GetSenderSMTPAddress usa el objeto PropertyAccessor para obtener los valores que no se exponen directamente en el modelo de objetos de Outlook. GetSenderSMTPAddress toma un MailItem. Si el valor de la propiedad SenderEmailType del MailItem recibido es "EX", el remitente del mensaje se encuentra en un servidor Exchange de su organización. GetSenderSMTPAddress usa la propiedad Sender del objeto MailItem para obtener el remitente, representado por el objeto AddressEntry. Si el objeto AddressEntry representa un usuario de Exchange, en el ejemplo se llama al método GetExchangeUser() para devolver el objeto ExchangeUser del objeto AddressEntry. GetSenderSMTPAddress, luego, usa la propiedad PrimarySmtpAddress del objeto ExchangeUser para devolver la dirección SMTP del remitente. Si el objeto AddressEntry del remitente no representa un objeto ExchangeUser , se usa el método GetProperty(String) del objeto PropertyAccessor , con PR_SMTP_ADDRESS (PidTagSmtpAddress) como argumento, para devolver la dirección SMTP del remitente.

Si usa Visual Studio para probar este ejemplo de código, primero debe agregar una referencia al componente de la biblioteca de objetos de Microsoft Outlook 15.0 y especificar la variable de Outlook al importar el espacio de nombres Microsoft.Office.Interop.Outlook. La instrucción using no debe producirse directamente antes de las funciones en el ejemplo de código, pero debe agregarse antes de la declaración de clase pública. La siguiente línea de código muestra cómo realizar la importación y la asignación en C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private string GetSenderSMTPAddress(Outlook.MailItem mail)
{
    string PR_SMTP_ADDRESS =
        @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
    if (mail == null)
    {
        throw new ArgumentNullException();
    }
    if (mail.SenderEmailType == "EX")
    {
        Outlook.AddressEntry sender =
            mail.Sender;
        if (sender != null)
        {
            //Now we have an AddressEntry representing the Sender
            if (sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeUserAddressEntry
                || sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeRemoteUserAddressEntry)
            {
                //Use the ExchangeUser object PrimarySMTPAddress
                Outlook.ExchangeUser exchUser =
                    sender.GetExchangeUser();
                if (exchUser != null)
                {
                    return exchUser.PrimarySmtpAddress;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return sender.PropertyAccessor.GetProperty(
                    PR_SMTP_ADDRESS) as string;
            }
        }
        else
        {
            return null;
        }
    }
    else
    {
        return mail.SenderEmailAddress;
    }
}

Vea también