Подключение к Office 365 через EWS

В статье Welcome to Exchange Online мы зарегистрировали пробную учетную запись в Office 365. В данной заметке рассмотрим код программы, которая подключается к Office 365 с помощью EWS и сохраняет почтовые сообщения. Для этого требуется, чтобы EWS 2.0 был проинсталлирован на компьютере.

Предположим, что используется пользователь First User с почтовым ящиком

First.User@ExampleCompany.onmicrosoft.com

и паролем Qwerty123. В методе CreateService создается объект ExchangeService для подключения под указанным пользователем. Домен можно не указывать либо использовать ExampleCompany.onmicrosoft.com. В следующем методе, PageThroughEntireInbox, перебираются сообщения из почтового ящика пользователя, загружается их содержимое и основные свойства, и каждое сохраняется в папке приложения в виде .eml файла.

using System;
using System.Globalization;
using System.IO;
using System.Net;
using Microsoft.Exchange.WebServices.Autodiscover;
using Microsoft.Exchange.WebServices.Data;

namespace Office365Access
{
  internal static class Program
  {
    static void Main(string[] args)
    {
      // создать сервис
      var service = CreateService(
        @"First.User@ExampleCompany.onmicrosoft.com",
        "Qwerty123",
        null,
        @"First.User@ExampleCompany.onmicrosoft.com");
      // перебрать почтовые сообщения
      PageThroughEntireInbox(service);
    }

    static ExchangeService CreateService(
      string userName,
      string password,
      string domain,
      string autodiscoverAddress)
    {
      // подключение к Exchange сервису
      var service = new ExchangeService(ExchangeVersion.Exchange2010)
        {
          Credentials = new NetworkCredential(
            userName,
            password,
            domain)
        };

      const string autodiscoverUrl =
        @"https://outlook.office365.com/EWS/Exchange.asmx";
      try
      {
        service.AutodiscoverUrl(
          autodiscoverAddress,
          RedirectionUrlValidationCallback);
      }
      catch (AutodiscoverRemoteException ex)
      {
        Console.WriteLine("Exception is thrown: " + ex.Error.Message);
        service.Url = new Uri(autodiscoverUrl);
      }
      catch (AutodiscoverLocalException ex)
      {
        Console.WriteLine("Exception is thrown: " + ex.Message);
        service.Url = new Uri(autodiscoverUrl);
      }
      Console.WriteLine(service.Url);
      return service;
    }

    static bool RedirectionUrlValidationCallback(String redirectionUrl)
    {
      // Допускаем все переадресации
      return true;
    }

    static void PageThroughEntireInbox(ExchangeService service)
    {
      var view = new ItemView(50);
      FindItemsResults findResults;

      do
      {
        findResults = service.FindItems(WellKnownFolderName.Inbox, view);
        var current = 0;
        foreach (var item in findResults.Items)
        {
          var message = item as EmailMessage;
          if (message == null)
            continue;

          // загрузка свойств почтового сообщения
          message.Load(new PropertySet(
            BasePropertySet.FirstClassProperties,
            ItemSchema.MimeContent));
          // сохранение в файле
          File.WriteAllBytes(
            (++current).ToString(CultureInfo.InvariantCulture) + "_"
            + DateTime.Now.ToShortDateString() + "_"
            + DateTime.Now.ToString("hh.mm") + ".eml",
            message.MimeContent.Content);
          // дополнительные операции с почтовым сообщением
          // ...
          // ...
        }
        view.Offset += 50;
      } while (findResults.MoreAvailable);
    }
  }
}


1. Все используемые IP-адреса, имена серверов, компьютеров, доменов, пользователей, являются фиктивными и используются исключительно в демонстрационных целях.
2. Информация приводится «AS IS».

One thought on “Подключение к Office 365 через EWS

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s