В статье 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); } } }
- Все используемые IP-адреса, имена серверов, компьютеров, доменов, пользователей, являются фиктивными и используются исключительно в демонстрационных целях.
- Информация приводится «AS IS».