private static void Process(string username, string password, string folderName) { Console.WriteLine(" > Opening file..."); var path = Directory.GetCurrentDirectory() + @"\Leebl.csv"; var leads = new LeadCollection(path); var binding = new ExchangeServiceBinding { Url = "https://amxprd0510.outlook.com/ews/exchange.asmx", Credentials = new NetworkCredential(username, password), RequestServerVersionValue = new RequestServerVersion { Version = ExchangeVersionType.Exchange2010 } }; #region Get folder Console.WriteLine(" > Retrieving folder..."); var folderRequest = new FindFolderType { Traversal = FolderQueryTraversalType.Deep, FolderShape = new FolderResponseShapeType { BaseShape = DefaultShapeNamesType.IdOnly }, ParentFolderIds = new BaseFolderIdType[] { new DistinguishedFolderIdType { Id = DistinguishedFolderIdNameType.root } }, Restriction = new RestrictionType { Item = new ContainsExpressionType { ContainmentMode = ContainmentModeType.Substring, ContainmentModeSpecified = true, ContainmentComparison = ContainmentComparisonType.IgnoreCase, ContainmentComparisonSpecified = true, Item = new PathToUnindexedFieldType { FieldURI = UnindexedFieldURIType.folderDisplayName }, Constant = new ConstantValueType { Value = folderName } } } }; var folderResponse = binding.FindFolder(folderRequest); var folderIds = new List <BaseFolderIdType>(); foreach (var folder in folderResponse.ResponseMessages.Items .Select(x => (x as FindFolderResponseMessageType)) .Where(x => x != null)) { folderIds.AddRange(folder.RootFolder.Folders.Select(y => y.FolderId)); } #endregion #region Get items Console.WriteLine(" > Retrieving items..."); var itemRequest = new FindItemType { Traversal = ItemQueryTraversalType.Shallow, ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.Default }, ParentFolderIds = folderIds.ToArray() }; var itemResponse = binding.FindItem(itemRequest); var itemIds = new List <BaseItemIdType>(); foreach (var item in itemResponse.ResponseMessages.Items .Select(x => (x as FindItemResponseMessageType)) .Where(x => x != null) .Where(x => x.RootFolder != null && x.RootFolder.TotalItemsInView > 0)) { itemIds.AddRange(((ArrayOfRealItemsType)item.RootFolder.Item).Items.Select(y => y.ItemId)); } #endregion #region Get bodies Console.WriteLine(" > Parsing " + itemIds.Count + " messages..."); var messageRequest = new GetItemType { ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.AllProperties }, ItemIds = itemIds.ToArray() }; var messageResponse = binding.GetItem(messageRequest); foreach (var message in messageResponse.ResponseMessages.Items .Select(x => (x as ItemInfoResponseMessageType)) .Where(x => x != null) .Select(x => x.Items.Items[0]) .Where(x => x != null)) { leads.Add(message.Body.Value, message.DateTimeSent); } #endregion Console.WriteLine(" > Saving to file..."); leads.Save(path); }
private static void Process(string username, string password, string folder, string to) { Console.WriteLine("\r\n Processing...\r\n"); Console.WriteLine(" > Connecting..."); var binding = new ExchangeServiceBinding { Url = "https://amxprd0510.outlook.com/ews/exchange.asmx", Credentials = new NetworkCredential(username, password), RequestServerVersionValue = new RequestServerVersion { Version = ExchangeVersionType.Exchange2010 } }; #region Get folder Console.WriteLine(" > Retrieving folder..."); var folderId = binding.FindFolder(new FindFolderType { Traversal = FolderQueryTraversalType.Deep, FolderShape = new FolderResponseShapeType { BaseShape = DefaultShapeNamesType.IdOnly }, ParentFolderIds = new BaseFolderIdType[] { new DistinguishedFolderIdType { Id = DistinguishedFolderIdNameType.root } }, Restriction = new RestrictionType { Item = new ContainsExpressionType { ContainmentMode = ContainmentModeType.Substring, ContainmentModeSpecified = true, ContainmentComparison = ContainmentComparisonType.IgnoreCase, ContainmentComparisonSpecified = true, Item = new PathToUnindexedFieldType { FieldURI = UnindexedFieldURIType.folderDisplayName }, Constant = new ConstantValueType { Value = folder } } } }) .ResponseMessages.Items.OfType <FindFolderResponseMessageType>() .First().RootFolder.Folders.First().FolderId; #endregion #region Get items Console.WriteLine(" > Retrieving items..."); var itemIds = binding.FindItem(new FindItemType { Traversal = ItemQueryTraversalType.Shallow, ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.Default }, ParentFolderIds = new BaseFolderIdType[] { new DistinguishedFolderIdType { Id = DistinguishedFolderIdNameType.inbox } } }) .ResponseMessages.Items.Select(x => x as FindItemResponseMessageType).Where(x => x != null) .Where(x => x.RootFolder != null && x.RootFolder.TotalItemsInView > 0) .SelectMany(item => ((ArrayOfRealItemsType)item.RootFolder.Item).Items.Select(y => y.ItemId)) .ToArray(); var messages = binding.GetItem(new GetItemType { ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.AllProperties }, ItemIds = itemIds }) .ResponseMessages.Items.Select(x => x as ItemInfoResponseMessageType).Where(x => x != null) .Select(x => x.Items.Items[0] as MessageType).Where(x => x != null && x.IsFromMe) .ToList(); #endregion #region Process items if (!messages.Any()) { Console.WriteLine(" > No messages to process!"); return; } Console.WriteLine(" > Processing " + messages.Count + " messages...\r\n"); foreach (var message in messages) { Console.WriteLine(" " + message.Subject); // forward message binding.CreateItem(new CreateItemType { MessageDisposition = MessageDispositionType.SendAndSaveCopy, MessageDispositionSpecified = true, SavedItemFolderId = new TargetFolderIdType { Item = new DistinguishedFolderIdType { Id = DistinguishedFolderIdNameType.sentitems } }, Items = new NonEmptyArrayOfAllItemsType { Items = new ItemType[] { new ForwardItemType { Subject = "[VERK]", ToRecipients = new[] { new EmailAddressType { EmailAddress = to } }, ReferenceItemId = new ItemIdType { ChangeKey = message.ItemId.ChangeKey, Id = message.ItemId.Id }, NewBodyContent = new BodyType { BodyType1 = BodyTypeType.HTML, Value = "Email is automatically forwarded by HENK." } } } } }); // move to subfolder binding.MoveItem(new MoveItemType { ToFolderId = new TargetFolderIdType { Item = folderId }, ItemIds = new BaseItemIdType[] { message.ItemId } }); } Console.WriteLine("\r\n Finished!"); #endregion }