获取邮件项发件人的 SMTP 地址

此代码示例获取邮件项发件人的简单邮件传输协议 (SMTP) 地址。

示例

若要确定已接收邮件项的 SMTP 地址,请使用 MailItem 对象的 SenderEmailAddress 属性。 不过,如果发件人位于组织内部,SenderEmailAddress 不会返回 SMTP 地址。在这种情况下,必须使用 PropertyAccessor 对象,才能返回发件人的 SMTP 地址。

在下面的代码示例中,GetSenderSMTPAddress 使用 PropertyAccessor 对象,获取未直接在 Outlook 对象模型中公开的值。 GetSenderSMTPAddress 需要使用 MailItem。 如果已接收 MailItemSenderEmailType 属性值为"EX",则表示邮件的发件人驻留在您组织内的 Exchange 服务器上。 GetSenderSMTPAddress 使用 MailItem 对象的 Sender 属性,获取由 AddressEntry 对象表示的发件人。 如果 AddressEntry 对象表示一个 Exchange 用户,则该示例将调用 GetExchangeUser() 方法以返回 AddressEntry 对象的 ExchangeUser 对象。 然后,GetSenderSMTPAddress 使用 ExchangeUser 对象的 PrimarySmtpAddress 属性,返回发件人的 SMTP 地址。 如果发件人的 AddressEntry 对象不表示 ExchangeUser 对象,则使用 PropertyAccessor 对象的 GetProperty (String) 方法,PR_SMTP_ADDRESS (PidTagSmtpAddress) 作为参数,以返回发件人的 SMTP 地址。

如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 using 语句直接添加到此代码示例中的函数前面,这个语句必须后跟公共类声明。 下面的代码行演示了如何在 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;
    }
}

另请参阅