Веб-сервисы Exchange - обрабатывающие сообщения и вложения доступа

Я нахожусь в процессе записи простого консольного приложения, которое контролирует конкретный обменный почтовый ящик, и когда электронные письма, соответствующие конкретным критериям, будут получены, приложение загрузит вложение XML-файла и заархивирует электронную почту.

Я соединился с EWS хорошо и смог циклично выполниться по любым электронным письмам, но я борюсь когда дело доходит до, создают объект EmailMessage, который я могу использовать для доступа к вложениям.

В примере кода ниже, EmailMessage message = EmailMessage.Bind(...) строка выполняется без ошибки, но не возвращает действительное сообщение поэтому, когда я получаю доступ и свойства или методы, я получаю ошибку: 'Ссылка на объект не набор к экземпляру объекта'.

Я плохо знаком с C# уже не говоря о EWS, таким образом, я изо всех сил пытаюсь знать, где запустить...

Фрагмент кода:

    public static void FindItems()
    {
        try
        {
            ItemView view = new ItemView(10);
            view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
            view.PropertySet = new PropertySet(
                BasePropertySet.IdOnly,
                ItemSchema.Subject,
                ItemSchema.DateTimeReceived);

            findResults = service.FindItems(
                WellKnownFolderName.Inbox,
                new SearchFilter.SearchFilterCollection(
                    LogicalOperator.Or,
                    new SearchFilter.ContainsSubstring(ItemSchema.Subject, "Sales Enquiry")),
                view);

            log2.LogInfo("Total number of items found: " + findResults.TotalCount.ToString());

            foreach (Item item in findResults)
            {
                log2.LogInfo(item.Id);

                EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments));

                Console.WriteLine(message.Subject.ToString());

                if (message.HasAttachments && message.Attachments[0] is FileAttachment)
                {
                    FileAttachment fileAttachment = message.Attachments[0] as FileAttachment;
                    fileAttachment.Load("C:\\temp\\" + fileAttachment.Name);
                    fileAttachment.Load();
                    Console.WriteLine("FileName: " + fileAttachment.FileName);
                }
            }
        }
        catch (Exception ex)
        {
            log2.LogError(ex.InnerException);
        }
    }

Мой код для доступа к вложениям является прямым из MSDN, таким образом, я надеюсь, что это существует поблизости... Какие-либо идеи?

7
задан JasonMArcher 10 July 2014 в 21:23
поделиться

1 ответ

Боюсь, я снова вернулся к этой проблеме и смог ее решить. К сожалению, в то время я был слишком подавлен, чтобы вернуться сюда и задокументировать решение. Прошло время, и моя память о том, что я изменил, исчезла, но насколько я помню, это было изменение на одну строку:

EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));

Ключевое отличие здесь в том, что мы указали BasePropertySet.FirstClassProperties как первый параметр PropertySet, а не BasePropertySet.IdOnly , который у нас изначально был.

Мой исходный код был взят из примера в Интернете, который делал именно то, что я пытался достичь, так что либо пример был не совсем верным, либо я переписал его неправильно, либо неправильно понял некоторые аспекты проблемы.

13
ответ дан 6 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: