8

我设置了一个收件箱作为交换,hello@mycompany.com

此外,还有一个别名news@mycompany.com,因此发送到该地址的所有电子邮件news最终都在hello收件箱中。

理想情况下,我希望能够使用 EWS 判断电子邮件已发送到哪个别名。

当我向 发送电子邮件news@mycompany.com并使用 Microsoft Outlook 检查邮件的 Internet 标头时,To:标头显示To: Hello <news@mycompany.com>的正是我想要查看的内容。

但是,使用 EWS,当我查看邮件的ToRecipients属性时,报告的电子邮件地址始终是主 SMTP 地址的地址。Webservices.Data.Item的InternetMessageHeaders属性也不包含该To:属性。使用EWSEditor检查消息的所有属性时,我似乎也看不到正确的地址。

这个论坛帖子的答案似乎表明,

...有关发送邮件的实际电子邮件地址的信息存储在收件人集合中,您在 EWS 中无法访问(在 exportmessage 之外)...

我将如何以编程方式执行此操作,以便找到正确的To:地址?

4

1 回答 1

8

这对我有用:

    private static string GetToAddress()
    {
        ExchangeService exService = new ExchangeService();
        exService.Credentials = new NetworkCredential("username", "password", "domain");
        exService.Url = new Uri("https://youraddress/EWS/Exchange.asmx");

        ExtendedPropertyDefinition PR_TRANSPORT_MESSAGE_HEADERS = new ExtendedPropertyDefinition(0x007D,MapiPropertyType.String);
        PropertySet psPropSet = new PropertySet(BasePropertySet.FirstClassProperties)
                                    {PR_TRANSPORT_MESSAGE_HEADERS, ItemSchema.MimeContent};

        FindItemsResults<Item> fiResults = exService.FindItems(WellKnownFolderName.Inbox, new ItemView(1));
        foreach (Item itItem in fiResults.Items)
        {
            itItem.Load(psPropSet);
            Object valHeaders;
            if (itItem.TryGetProperty(PR_TRANSPORT_MESSAGE_HEADERS, out valHeaders))
            {
                Regex regex = new Regex(@"To:.*<(.+)>");
                Match match = regex.Match(valHeaders.ToString());
                if (match.Groups.Count == 2)
                    return match.Groups[1].Value;
            }
            return ToAddress;
        }
        return "Cannot find ToAddress";
    }

代码来自: http ://social.technet.microsoft.com/Forums/en-au/exchangesvrdevelopment/thread/1e5bbde0-218e-466e-afcc-cb60bc2ba692

于 2012-05-30T00:45:29.400 回答