В статье 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».
[…] для управления Office 365 и Exchange Online с помощью PowerShell. 4. Подключение к Office365 с помощью EWS. В статье рассмотрен пример кода, который позволяет […]