Download attachment from Exchange using Exchange Web Services

孤人 提交于 2019-12-01 16:53:30
vikas

Check your profile. If you're running on light mode, attachments are not being downloaded with message.

add following line

item.Load() // loads the entire message with attachment

The answer to your new problem is

    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);

                }
            }

        }

Unless I'm missing something obvious all you need to do is enumerable through item.Attachments.

Click here and scroll down to where you see the Example heading.

Solution for downloading all attachments from specified amount of emails:

  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");
                   }
             }
        }

Don't forget to pass correct version of Exchange Server to ExchangeService constructor.

This is a method GetAttachmentsFromEmail that you can use to download attachments.

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);
            }
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!