Загрузить вложение из Exchange с помощью веб-служб Exchange - PullRequest
9 голосов
/ 13 мая 2011

Я пытаюсь использовать следующий код для подключения и загрузки вложения из электронной почты в папку «Входящие» с использованием C # и веб-служб Exchange, но получаю ошибку «System.ArgumentOutOfRangeException», и не могу понять, почему. Я гуглил ответ, но не могу его найти, или я нашел ответы на очень старые версии EWS.

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

Может кто-нибудь показать мне ошибку моих путей?

Заранее спасибо,

Джеймс

    static void Main(string[] args)
    {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new NetworkCredential("MYLOGIN", "MYPASSWORD", "MYDOMAIN");

        service.Url = new Uri("https://MYMAILSERVER/EWS/Exchange.asmx");

        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(1000));

        foreach (Item item in findResults.Items)
        {
            if (item.HasAttachments && item.Attachments[0] is FileAttachment)
            {
                FileAttachment fileAttachment = item.Attachments[0] as FileAttachment;
                fileAttachment.Load("C:\\temp\\" + fileAttachment.Name);
            }

        }
    }
}

Решена, но новая проблема

Я уже разобрал проблему, изменив 'foreach (элемент Item в findResults.Items)' на 'foreach (элемент EmailMessage в findResults.Items)', но теперь мне нужно выяснить, как перечислять через вложения - любые идеи кто-нибудь?

Ответы [ 5 ]

7 голосов
/ 19 апреля 2012

Проверьте свой профиль. Если вы работаете в легком режиме, вложения не загружаются с сообщением.

добавить следующую строку

item.Load() // loads the entire message with attachment
2 голосов
/ 17 октября 2013

Ответ на вашу новую проблему:

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

    //service.Credentials = new NetworkCredential( "{Active Directory ID}", "{Password}", "{Domain Name}" );

    service.AutodiscoverUrl("firstname.lastname@MyCompany.com");

        FindItemsResults<Item> findResults = service.FindItems(
           WellKnownFolderName.Inbox,
           new ItemView(10));

        foreach (Item item in findResults.Items)
        {
            Console.WriteLine(item.Subject);
            item.Load();
            if(item.HasAttachments)
            {
                foreach (var i in item.Attachments)
                {
                    FileAttachment fileAttachment = i as FileAttachment;
                    fileAttachment.Load();
                    Console.WriteLine("FileName: " + fileAttachment.Name);

                }
            }

        }
1 голос
/ 05 января 2016

Решение для загрузки всех вложений из указанного количества писем:

  ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
  service.Credentials = new NetworkCredential("login", "password");

  service.Url = new Uri("https://mail.Yourservername.com/EWS/Exchange.asmx");

  ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

  FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

  if (findResults != null && findResults.Items != null && findResults.Items.Count > 0)
      foreach (EmailMessage item in findResults)
       {
         EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments, ItemSchema.HasAttachments));
           foreach (Attachment attachment in message.Attachment
             {
               if (attachment is FileAttachment)
                  {
                    FileAttachment fileAttachment = attachment as FileAttachment;      
                    fileAttachment.Load(@"Folder\file.name");
                   }
             }
        }

Не забудьте передать правильную версию Exchange Server конструктору ExchangeService.

1 голос
/ 24 мая 2011

Если я не пропустил что-то очевидное, все, что вам нужно сделать, это перечислить через item.Attachments.

Нажмите здесь и прокрутите вниз до того места, где вы видите заголовок Example.

0 голосов
/ 22 сентября 2017

Это метод GetAttachmentsFromEmail, который можно использовать для загрузки вложений.

public static void GetAttachmentsFromEmail(ExchangeService service, ItemId itemId)
    {
        // Bind to an existing message item and retrieve the attachments collection.
        // This method results in an GetItem call to EWS.
        EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));

        // Iterate through the attachments collection and load each attachment.
        foreach (Attachment attachment in message.Attachments)
        {
            if (attachment is FileAttachment)
            {
                FileAttachment fileAttachment = attachment as FileAttachment;

                // Load the attachment into a file.
                // This call results in a GetAttachment call to EWS.
                fileAttachment.Load("C:\\temp\\" + fileAttachment.Name);

                Console.WriteLine("File attachment name: " + fileAttachment.Name);
            }
            else // Attachment is an item attachment.
            {
                ItemAttachment itemAttachment = attachment as ItemAttachment;

                // Load attachment into memory and write out the subject.
                // This does not save the file like it does with a file attachment.
                // This call results in a GetAttachment call to EWS.
                itemAttachment.Load();

                Console.WriteLine("Item attachment name: " + itemAttachment.Name);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...