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

Я запрашиваю сообщения электронной почты в почтовом ящике с помощью EWS. Я получаю список сообщений электронной почты обратно. Я хочу знать, как определить, является ли сообщение электронной почты ответом на предыдущее письмо в почтовом ящике? В основном я хочу сгруппировать электронные письма, такие как представление «просмотр как беседа» в Outlook. Как я могу связать такие сообщения электронной почты?

Спасибо.


person n179911    schedule 26.09.2014    source источник


Ответы (1)


Если вы используете 2010 или более позднюю версию, вы можете использовать операции диалога в EWS, чтобы сделать это, см. http://msdn.microsoft.com/en-us/library/office/dn610351(v=exchg.150).aspx

Другой метод, который вы можете использовать, — это захватить транспортные заголовки из расширенного свойства и проанализировать заголовок InReplyTo, например

        ItemView view = new ItemView(100);
        view.PropertySet = new PropertySet(PropertySet.IdOnly);
        PropertySet PropSet = new PropertySet();
        PropSet.Add(ItemSchema.HasAttachments);
        PropSet.Add(ItemSchema.Body);
        PropSet.Add(ItemSchema.DisplayTo);
        PropSet.Add(ItemSchema.IsDraft);
        PropSet.Add(ItemSchema.DateTimeCreated);
        PropSet.Add(ItemSchema.DateTimeReceived);
        ExtendedPropertyDefinition PR_TRANSPORT_MESSAGE_HEADERS = new ExtendedPropertyDefinition(0x007D, MapiPropertyType.String);
        PropSet.Add(PR_TRANSPORT_MESSAGE_HEADERS);
        FindItemsResults<Item> findResults;
        List<EmailMessage> emails = new List<EmailMessage>();
        do
        {
            findResults = service.FindItems(WellKnownFolderName.Inbox, view);
            if (findResults.Items.Count > 0)
            {
                service.LoadPropertiesForItems(findResults.Items, PropSet);
                foreach (var item in findResults.Items)
                {
                    String Headers = "";
                    if (item.TryGetProperty(PR_TRANSPORT_MESSAGE_HEADERS, out Headers))
                    {
                        Int32 slen = Headers.IndexOf("In-Reply-To:");
                        if (slen > 0)
                        {
                            Int32 elen = Headers.IndexOf("\r\n", (slen + 12));
                            Console.WriteLine("InReponse to : " + Headers.Substring((slen+12),elen-(slen+12)));
                        }

                    }                        
                }
            }
            view.Offset += findResults.Items.Count;
        } while (findResults.MoreAvailable);

Ура Глен

person Glen Scales    schedule 29.09.2014