Заголовок «Кому» API веб-служб Exchange (EWS) для псевдонима - PullRequest
7 голосов
/ 02 июня 2011

У меня есть настроенный почтовый ящик, hello@mycompany.com

Кроме того, для этого существует псевдоним news@mycompany.com, поэтому все электронные письма на адрес news заканчиваются на hello Входящие.

В идеале я хочу, чтобы с помощью EWS можно было узнать, на какой псевдоним отправлено электронное письмо.

Когда я отправляю электронное письмо на номер news@mycompany.com и проверяю заголовки сообщения в Интернете с помощью Microsoft Outlook, заголовок To: читает To: Hello <news@mycompany.com> это именно то, что я хочу видеть.

Однако при использовании EWS, когда я смотрю на свойство сообщения ToRecipients , сообщаемый адрес электронной почты всегда совпадает с адресом основного SMTP-адреса. Также свойство InternetMessageHeaders объекта Webservices.Data.Item не содержит свойство To:. Я также не могу видеть правильный адрес, используя EWSEditor , чтобы проверить все свойства сообщения.

Ответ на это сообщение на форуме , кажется, предполагает, что

... Информация о фактическом адресе электронной почты, на который отправляется сообщение, хранится в коллекции получателей, к которой вы не можете получить доступ (вне экспорта) в EWS ...

Как бы я поступил так программно, чтобы найти правильный To: адрес?

1 Ответ

6 голосов
/ 30 мая 2012

Это работает для меня:

    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

...