예제 #1
0
        /// <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);
                }
            }
        }
예제 #2
0
        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
        }