Exchange Web Services(EWS)API中用于别名的"To"头部

8
我在Exchange中设置了一个收件箱,名称为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查看消息的所有属性以找到正确的地址。 这个论坛帖子的答案似乎表明:

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

我该如何编写程序来查找正确的To:地址?

我遇到了完全相同的问题,你找到解决方案了吗? - HeavenCore
@HeavenCore,很遗憾,我们最终在电子邮件主题行中添加了一个井号来告诉我们的应用程序如何处理该电子邮件。例如,“blah blah #news”的主题将被处理为新闻项目。 - RYFN
1
好的,无论如何还是谢谢你,如果我找到了什么,我会告诉你的。 - HeavenCore
你有关于这个的任何消息吗?我也遇到了同样的问题... - Boas Enkler
1
很遗憾,@BoasEnkler,目前项目处于闲置状态,所以我还没有机会尝试其他解决方案。但是弗兰克的解决方案看起来值得一试!如果您发现它有效,请告诉我们 :) - RYFN
在主题中使用哈希标签容易出现用户错误。这非常令人恼火,因为我需要知道预期地址是谁,同时又要保证所有电子邮件都到达同一个邮箱中。 - JsonStatham
1个回答

9
这对我有用:
    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

1
对我有用。我需要添加更多逻辑来解析多个收件人和多行的“To:”头。 - Scott
这个解决方案有什么经验吗? - Boas Enkler
我不确定为什么这不是答案。它完全按照我所需的方式工作。 - Miles
1
ToAddress 在任何地方都没有定义? - JsonStatham
1
这看起来很不错,但我有一个情况,其中别名地址没有用尖括号括起来。有什么办法可以考虑到这两种情况吗?也就是说,收件人电子邮件可能像这样:'To: User Name username@contoso.com',或者像这样:'To: username@contoso.com' - SeanOB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接