/// <summary> /// Отправляет электронное письмо /// </summary> /// <param name="subject">Тема письма</param> /// <param name="body">Текст письма</param> public static void SendMail(string subject, string body) { using (ExchangeServiceBinding bind = new ExchangeServiceBinding()) { bind.Credentials = new NetworkCredential(Username, Password, Domain); bind.Url = "https://" + Host + "/EWS/Exchange.asmx"; bind.RequestServerVersionValue = new RequestServerVersion(); bind.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1; CreateItemType createItemRequest = new CreateItemType { Items = new NonEmptyArrayOfAllItemsType(), MessageDispositionSpecified = true, MessageDisposition = MessageDispositionType.SendOnly }; MessageType message = new MessageType(); message.ToRecipients = new EmailAddressType[1]; message.ToRecipients[0] = new EmailAddressType(); message.ToRecipients[0].EmailAddress = ToRecipient; message.Subject = subject; message.Body = new BodyType(); message.Body.BodyType1 = BodyTypeType.Text; message.Body.Value = body; createItemRequest.Items.Items = new ItemType[1]; createItemRequest.Items.Items[0] = message; CreateItemResponseType createItemResponse = bind.CreateItem(createItemRequest); ArrayOfResponseMessagesType responseMessages = createItemResponse.ResponseMessages; ResponseMessageType[] responseMessage = responseMessages.Items; foreach (ResponseMessageType rmt in responseMessage.Where(rmt => rmt.ResponseClass == ResponseClassType.Error)) { throw new Exception(rmt.MessageText); } } }
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 }