Using the Exchange Webs Services API - JackHu88/Comm GitHub Wiki

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Exchange.WebServices.Data;

namespace Office365Mail
{
    class Program
    {
        static void Main(string[] args)
        {
            ExchangeService _service;

            try
            {
                Console.WriteLine("Registering Exchange connection");

                _service = new ExchangeService
                {
                    Credentials = new WebCredentials("[email protected]", "xxxxx")
                };
            }
            catch
            {
                Console.WriteLine("new ExchangeService failed. Press enter to exit:");
                return;
            }

            // This is the office365 webservice URL
            _service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

            // Prepare seperate class for writing email to the database
            try
            {
                Console.WriteLine("Reading mail");

                // Read 100 mails
                /*foreach (EmailMessage email in _service.FindItems(WellKnownFolderName.Inbox, new ItemView(100)))
                {
                    email.Load(new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.TextBody));
                    string recipients = "";

                    foreach (EmailAddress emailAddress in email.CcRecipients)
                    {
                        recipients += ";" + emailAddress.Address.ToString();
                    }
                    String message_id = email.InternetMessageId;
                    String from = email.From.Address;
                    String body = email.TextBody.ToString();
                    String cc = recipients;
                    String subject = email.Subject;
                    String received_time = email.DateTimeReceived.ToUniversalTime().ToString();

                    recipients = "";
                    foreach (EmailAddress emailAddress in email.ToRecipients)
                    {
                        recipients += ";" + emailAddress.Address.ToString();
                    }

                    Console.WriteLine("message_id", message_id);
                    Console.WriteLine("from", from);
                    Console.WriteLine("cc", cc);
                    Console.WriteLine("subject", subject);
                    Console.WriteLine("body", body);
                    Console.WriteLine("received_time", received_time);
                }*/


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

                foreach (Item item in findResults.Items)
                {
                    Console.WriteLine(item.Subject);
                }*/

                //GetAllItems(_service);
                MailItem[] mailArr = GetUnreadMailFromInbox(_service);

                Console.WriteLine("Exiting");
            }
            catch (Exception e)
            {
                Console.WriteLine("An error has occured. \n:" + e.Message);
            }
        }


        public class MailItem
        {
            public string From;
            public string[] Recipients;
            public string Subject;
            public string Body;
        }

        public static MailItem[] GetUnreadMailFromInbox(ExchangeService service)
        {
            FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
            PropertySet GetItemsPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients, EmailMessageSchema.CcRecipients, EmailMessageSchema.Attachments, EmailMessageSchema.HasAttachments);
            GetItemsPropertySet.RequestedBodyType = BodyType.Text;// Plain Text

            ServiceResponseCollection<GetItemResponse> items =
                service.BindToItems(findResults.Select(item => item.Id), GetItemsPropertySet);

            foreach (var item in items) {
                var From = ((EmailAddress)item.Item[EmailMessageSchema.From]).Address;
                var To = ((EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray();
                var CC = ((EmailAddressCollection)item.Item[EmailMessageSchema.CcRecipients]).Select(recipient => recipient.Address).ToArray();
                var Subject = item.Item.Subject;
                var Body = item.Item.Body.ToString();

                if (item.Item.HasAttachments)
                {
                    var attachments = item.Item.Attachments;

                    foreach (var attachment in attachments)
                    {
                        if (attachment is FileAttachment && !attachment.IsInline)
                        {
                            FileAttachment fileAttachment = attachment as FileAttachment;
                            //FileStream theStream = new FileStream("C:\\temp\\Stream_" + fileAttachment.Name, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                            //fileAttachment.Load(theStream);
                            Console.WriteLine(attachment.Name);

                            MemoryStream stream = new MemoryStream();
                            fileAttachment.Load(stream);

                            byte[] bytes = new byte[0];
                            BinaryReader r = new BinaryReader(stream);
                            r.BaseStream.Seek(0, SeekOrigin.Begin);    //将文件指针设置到文件开
                            bytes = r.ReadBytes((int)r.BaseStream.Length);

                        }
                    }
                }
                
                Console.WriteLine();
            }

            /*return items.Select(item =>
            {
                return new MailItem()
                {
                    From = ((Microsoft.Exchange.WebServices.Data.EmailAddress)item.Item[EmailMessageSchema.From]).Address,
                    Recipients = ((Microsoft.Exchange.WebServices.Data.EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray(),
                    Subject = item.Item.Subject,
                    Body = item.Item.Body.ToString(),
                };
            }).ToArray();*/
            MailItem[] arr = null;
            return arr;
        }


        private static ExtendedPropertyDefinition TextBodyProperty = new ExtendedPropertyDefinition(0x1000, MapiPropertyType.String);
        private static ExtendedPropertyDefinition HtmlBodyProperty = new ExtendedPropertyDefinition(0x1013, MapiPropertyType.Binary);
        private static void GetAllItems(ExchangeService exchangeService)
        {
            var offset = 0;
            const int pageSize = 100;
     
            FindItemsResults<Item> result;
            do
            {
                var view = new ItemView(pageSize, offset)
                              {
                                  PropertySet = new PropertySet(BasePropertySet.IdOnly)
                                                    {
                                                        HtmlBodyProperty
                                                    }
                              };
    
               result = exchangeService.FindItems(WellKnownFolderName.Inbox, view);
    
               foreach (var item in result)
               {
                   object body;
                  foreach (ExtendedProperty extendedProperty in item.ExtendedProperties)
                  {
                      Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
                      Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
                  }
                   /*if (item.ExtendedProperties.TryGetValue(HtmlBodyProperty, out body))
                   {
                       Console.WriteLine("item.Body = {0}", Encoding.UTF8.GetString(Convert.FromBase64String((string)body)));
                   }*/
               }
               offset += pageSize;
           } while (result.MoreAvailable);
       }

    }
}

⚠️ **GitHub.com Fallback** ⚠️