Compartilhar via


Obter o endereço SMTP do remetente de uma mensagem

Este exemplo contém o endereço de email SMTP do remetente para um item de email.

Exemplo

Para determinar o endereço SMTP de um item de email recebido, use a propriedade SenderEmailAddress do objeto MailItem. No entanto, se o remetente for um membro interno da sua organização, SenderEmailAddress não retorna um endereço SMTP, e você deve usar o objeto PropertyAccessor para retornar o endereço SMTP do remetente.

No exemplo de código a seguir, GetSenderSMTPAddress usa o objeto PropertyAccessor para obter valores que não são expostos diretamente no modelo de objeto do Outlook. GetSenderSMTPAddress leva um MailItem. Se o valor da propriedade SenderEmailType do MailItem recebido for "EX", o remetente da mensagem está localizado em um servidor do Exchange na sua organização. GetSenderSMTPAddress usa a propriedade Sender do objeto MailItem para obter o remetente, representado pelo objeto AddressEntry. Se o objeto AddressEntry objeto representa um usuário do Exchange, o exemplo chama o método GetExchangeUser() para retornar o objeto ExchangeUser do objeto AddressEntry. GetSenderSMTPAddress usa a propriedade PrimarySmtpAddress do objeto ExchangeUser para retornar o endereço SMTP do remetente. Se o objeto AddressEntry para o remetente não representa um objeto ExchangeUser , o método GetProperty(String) do objeto PropertyAccessor será usado, com PR_SMTP_ADDRESS (PidTagSmtpAddress) como argumento, para retornar o endereço SMTP do remetente.

Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instruçãousing não deve ocorrer diretamente antes das funções no exemplo de código, mas deve ser adicionada antes da declaração de classe pública. The following line of code shows how to do the import and assignment in 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;
    }
}

Confira também