예제 #1
0
        public FolderIdType FindFolderID(ExchangeServiceBinding service, DistinguishedFolderIdNameType folder)
        {
            FindFolderType requestFindFolder = new FindFolderType();

            requestFindFolder.Traversal = FolderQueryTraversalType.Deep;

            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
            folderIDArray[0]    = new DistinguishedFolderIdType();
            folderIDArray[0].Id = folder;

            FolderResponseShapeType itemProperties = new FolderResponseShapeType();

            itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;

            requestFindFolder.ParentFolderIds = folderIDArray;
            requestFindFolder.FolderShape     = itemProperties;
            //requestFindFolder.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;


            FindFolderResponseType objFindFolderResponse = service.FindFolder(requestFindFolder);

            foreach (ResponseMessageType responseMsg in objFindFolderResponse.ResponseMessages.Items)
            {
                if (responseMsg.ResponseClass == ResponseClassType.Success)
                {
                    FindFolderResponseMessageType objFindResponse = responseMsg as FindFolderResponseMessageType;

                    foreach (BaseFolderType objFolderType in objFindResponse.RootFolder.Folders)
                    {
                        return(objFolderType.FolderId);
                    }
                }
            }
            return(null);
        }
예제 #2
0
    static FolderIdType FindFolder(ExchangeServiceBinding esb, DistinguishedFolderIdType fiFolderID, String fnFldName)
    {
        FolderIdType rvFolderID = new FolderIdType();

        // Create the request and specify the travesal type
        FindFolderType findFolderRequest = new FindFolderType();
        findFolderRequest.Traversal = FolderQueryTraversalType.Deep;

        // Define the properties returned in the response
        FolderResponseShapeType responseShape = new FolderResponseShapeType();
        responseShape.BaseShape = DefaultShapeNamesType.Default;
        findFolderRequest.FolderShape = responseShape;

        // Identify which folders to search
        DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
        folderIDArray[0] = new DistinguishedFolderIdType();
        folderIDArray[0].Id = fiFolderID.Id;

        //Add Restriction for DisplayName
        RestrictionType ffRestriction = new RestrictionType();
        IsEqualToType ieToType = new IsEqualToType();
        PathToUnindexedFieldType diDisplayName = new PathToUnindexedFieldType();
        diDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;
        FieldURIOrConstantType ciConstantType = new FieldURIOrConstantType();
        ConstantValueType cvConstantValueType = new ConstantValueType();
        cvConstantValueType.Value = fnFldName;
        ciConstantType.Item = cvConstantValueType;
        ieToType.Item = diDisplayName;
        ieToType.FieldURIOrConstant = ciConstantType;
        ffRestriction.Item = ieToType;
        findFolderRequest.Restriction = ffRestriction;

        // Add the folders to search to the request
        findFolderRequest.ParentFolderIds = folderIDArray;

        try
        {
            // Send the request and get the response
            FindFolderResponseType findFolderResponse = esb.FindFolder(findFolderRequest);

            // Get the response messages
            ResponseMessageType[] rmta = findFolderResponse.ResponseMessages.Items;

            foreach (ResponseMessageType rmt in rmta)
            {
                // Cast to the correct response message type
                FindFolderResponseMessageType ffResponse = (FindFolderResponseMessageType)rmt;

                foreach (FolderType fFoundFolder in ffResponse.RootFolder.Folders)
                {
                    rvFolderID = fFoundFolder.FolderId;
                }
            }
        }
        catch (Exception e)
        {
            string problem = e.Message;
        }

        return rvFolderID;
    }
예제 #3
0
파일: Program.cs 프로젝트: coenvdwel/leebl
        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);
        }
예제 #4
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
        }