Веб-службы Exchange - обработка сообщений и доступ к вложениям - PullRequest
7 голосов
/ 14 июня 2010

Я нахожусь в процессе написания простого консольного приложения, которое отслеживает конкретный почтовый ящик обмена, и при получении писем, соответствующих определенным критериям, приложение загрузит вложение 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 , так что я надеюсь, что это там есть ... Есть идеи?

Ответы [ 2 ]

13 голосов
/ 06 июля 2010

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

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

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

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

0 голосов
/ 21 февраля 2017
foreach(EmailMessage message in findResults)
{
    message.Load();

    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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...