コード例 #1
0
        public static Task FindTaskBySubject(ExchangeService service, string Subject)
        {
            // Specify the folder to search, and limit the properties returned in the result.
            TasksFolder tasksfolder = TasksFolder.Bind(service,
                                                       WellKnownFolderName.Tasks,
                                                       new PropertySet(BasePropertySet.IdOnly, FolderSchema.TotalCount));

            // Set the number of items to the smaller of the number of items in the Contacts folder or 1000.
            int numItems = tasksfolder.TotalCount < 1000 ? tasksfolder.TotalCount : 1000;

            // Instantiate the item view with the number of items to retrieve from the contacts folder.
            ItemView view = new ItemView(numItems);

            // To keep the request smaller, send only the display name.
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, TaskSchema.Subject);

            // Create a searchfilter to check the subject of the tasks.
            SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(TaskSchema.Subject, Subject);

            // Retrieve the items in the Tasks folder with the properties you selected.
            FindItemsResults <Item> taskItems = service.FindItems(WellKnownFolderName.Tasks, filter, view);

            // If the subject of the task matches only one item, return that task item.
            if (taskItems.Count() == 1)
            {
                return((Task)taskItems.Items[0]);
            }
            // No tasks, or more than one, were found.
            else
            {
                return(null);
            }
        }
コード例 #2
0
        /// <summary>
        /// Search for an item in an exchange mail box
        /// </summary>
        /// <param name="service">Service instance</param>
        /// <param name="id">Unique item id</param>
        /// <returns>Item instance if exists</returns>
        public Item GetItem(ExchangeService service, Guid id)
        {
            // Create search filter
            var filter   = new SearchFilter.IsEqualTo(ExchangeExtendedProperty.SimplicIdDefinition, id.ToString());
            var itemView = new ItemView(1);

            var folders = new[]
            {
                WellKnownFolderName.Root,
                WellKnownFolderName.Calendar,
                WellKnownFolderName.Contacts,
                WellKnownFolderName.Notes,
                WellKnownFolderName.PublicFoldersRoot,
                WellKnownFolderName.Tasks
            };

            // Search entry
            foreach (var folder in folders)
            {
                var result = service.FindItems(folder, filter, itemView);
                if (result.Any())
                {
                    var itemInstance = result.FirstOrDefault();
                    if (itemInstance != null)
                    {
                        return(itemInstance);
                    }
                }
            }

            return(null);
        }
コード例 #3
0
        public void CreateMeeting(AppointmentModel data)
        {
            try
            {
                ExchangeService service        = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
                SearchFilter    sfSearchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);
                service.UseDefaultCredentials = true;

                service.AutodiscoverUrl(Session.UserData.email, adAutoDiscoCallBack);
                Appointment meeting = new Appointment(service);

                meeting.Subject = data.Subject;
                meeting.Body    = new EmailTemplate().MeetingMeghivo(data.interview.projekt_megnevezes, data.interview.date_start + "  " + data.interview.time_start + " - " + data.interview.time_end, data.interview.helyszin, data.interview.jelolt_megnevezes);
                DateTime date_start = DateHandler.GenerateFromString(data.Start, data.Time_start);
                DateTime date_end   = DateHandler.GenerateFromString(data.Start, data.Time_end);
                meeting.Start    = date_start;
                meeting.End      = date_end;
                meeting.Location = data.Location;
                foreach (var attendee in data.Attendees)
                {
                    meeting.RequiredAttendees.Add(attendee);
                }
                meeting.ReminderMinutesBeforeStart = 30;
                meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy);
                Item item = Item.Bind(service, meeting.Id, new PropertySet(ItemSchema.Subject));
            }
            catch (Exception e)
            {
                MessageBox.Show("Sikertelen létrehozás! \n\n Error: \n" + e);
            }
        }
コード例 #4
0
        /// <summary>
        /// Provides a record-by-record processing functionality for the cmdlet.
        /// </summary>
        protected override void ProcessRecord()
        {
            // Create the Exchange Service Object and auth with bearer token
            ExchangeService exchangeService = new ExchangeService(new AuthenticationProvider(), this.SmtpAddress, RestEnvironment.OutlookBeta);

            MailFolder mailFolder = new MailFolder(exchangeService)
            {
                DisplayName = this.FolderName
            };

            mailFolder.Save(this.FolderRoot);

            FolderView         folderView         = new FolderView(10);
            FindFoldersResults findFoldersResults = null;

            do
            {
                // Find the new folder and output the result
                SearchFilter searchFilter = new SearchFilter.IsEqualTo(MailFolderObjectSchema.DisplayName, mailFolder.DisplayName);
                findFoldersResults = exchangeService.FindFolders(this.FolderRoot, searchFilter, folderView);
                folderView.Offset += folderView.PageSize;
                foreach (MailFolder folder in findFoldersResults)
                {
                    this.WriteObject(new PSObject(folder));
                }
            }while (findFoldersResults.MoreAvailable);
        }
コード例 #5
0
        /// <summary>
        /// Sync folder hierarchy.
        /// </summary>
        /// <param name="exchangeService">Exchange service.</param>
        /// <returns></returns>
        public static async Task SyncFolderHierarchy(ExchangeService exchangeService)
        {
            ChangeCollection <MailFolderChange> folderChange = null;
            string syncState = null;

            do
            {
                folderChange = await exchangeService.SyncFolderHierarchy(null, syncState);

                syncState = folderChange.SyncState;

                foreach (MailFolderChange mailFolderChange in folderChange.Items)
                {
                    Assert.AreEqual(
                        ChangeType.Created,
                        mailFolderChange.ChangeType);
                }
            } while (folderChange.MoreAvailable);

            SearchFilter          inbox  = new SearchFilter.IsEqualTo(MailFolderObjectSchema.DisplayName, "Inbox");
            FindMailFolderResults result =
                await exchangeService.FindFolders(WellKnownFolderName.MsgFolderRoot, inbox, new MailFolderView());

            MailFolder mf = new MailFolder(exchangeService);

            mf.DisplayName = "kakakoko";
            await mf.SaveAsync(result.MailFolders[0]);

            do
            {
                folderChange = await exchangeService.SyncFolderHierarchy(null, syncState);

                syncState = folderChange.SyncState;

                Assert.AreEqual(
                    1,
                    folderChange.TotalCount);

                Assert.AreEqual(
                    ChangeType.Created,
                    folderChange.Items[0].ChangeType);
            } while (folderChange.MoreAvailable);

            await mf.DeleteAsync();

            do
            {
                folderChange = await exchangeService.SyncFolderHierarchy(null, syncState);

                syncState = folderChange.SyncState;

                Assert.AreEqual(
                    1,
                    folderChange.TotalCount);

                Assert.AreEqual(
                    ChangeType.Deleted,
                    folderChange.Items[0].ChangeType);
            } while (folderChange.MoreAvailable);
        }
コード例 #6
0
        private FindItemsResults <Item> TimedFindItemsAllItemsSearch(string conversationId, ExchangeService exchangeService = null)
        {
            if (exchangeService == null)
            {
                exchangeService = _service;
            }

            ItemView view = new ItemView(100, 0, OffsetBasePoint.Beginning);

            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.ConversationId);
            view.Traversal   = ItemTraversal.Shallow;

            SearchFilter searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.ConversationId, conversationId);

            SleepIfThrottled();

            FindItemsResults <Item> results = null;
            long startTicks = DateTime.Now.Ticks;

            try
            {
                results = exchangeService.FindItems(AllItemsFolderId(exchangeService), searchFilter, view);
            }
            catch (Exception ex)
            {
                Throttled(ex);
            }
            finally
            {
                long endTicks = DateTime.Now.Ticks;
                _stats.AddStat("FindItemsAllItemsSearch", endTicks - startTicks);
            }
            return(results);
        }
コード例 #7
0
        private bool UnreadAutopsyRequestExist()
        {
            bool result = false;

            ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

            service.Credentials = new WebCredentials("ypiilab\\histology", "Let'sMakeSlides");

            service.TraceEnabled = true;
            service.TraceFlags   = TraceFlags.All;

            service.AutodiscoverUrl("*****@*****.**", RedirectionUrlValidationCallback);
            SearchFilter searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);

            List <SearchFilter> searchFilterCollection = new List <SearchFilter>();

            searchFilterCollection.Add(searchFilter);
            ItemView view = new ItemView(50);

            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived);
            view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
            view.Traversal = ItemTraversal.Shallow;
            FindItemsResults <Item> findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);

            if (findResults.Items.Count > 0)
            {
                result = true;
            }

            return(result);
        }
コード例 #8
0
ファイル: OutlookClient.cs プロジェクト: kalabakas1/MPE
        public List <CalendarEvent> GetEvents(string calendarName, DateTime fromDate, DateTime toDate)
        {
            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

            service.Credentials = new WebCredentials(_username, _password);
            service.Url         = new Uri(_exchangeUrl);

            var folderView = new FolderView(100);

            folderView.PropertySet = new PropertySet(BasePropertySet.IdOnly);
            folderView.PropertySet.Add(FolderSchema.DisplayName);
            folderView.Traversal = FolderTraversal.Deep;
            var searchFilter   = new SearchFilter.IsEqualTo(FolderSchema.FolderClass, "IPF.Appointment");
            var foldersResults = service.FindFolders(WellKnownFolderName.Root, searchFilter, folderView);
            var calendar       = foldersResults.Where(f => f.DisplayName == calendarName).Cast <CalendarFolder>().FirstOrDefault();

            if (calendar == null)
            {
                return(new List <CalendarEvent>());
            }

            var cView = new CalendarView(fromDate, toDate, 50);

            cView.PropertySet = new PropertySet(ItemSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End, ItemSchema.Id);
            var appointments = calendar.FindAppointments(cView).ToList();

            return(appointments.Select(x => new CalendarEvent
            {
                Id = x.Id.UniqueId,
                DateFrom = x.Start,
                DateTo = x.End,
                Duration = Convert.ToDecimal((x.End - x.Start).TotalHours),
                Subject = x.Subject
            }).ToList());
        }
コード例 #9
0
        public IEnumerable <EmailMessageItem> GetUnreadMessages()
        {
            LoginToExchangeService();


            var searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);

            var view = new ItemView(50)
            {
                PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.DateTimeReceived),
                Traversal   = ItemTraversal.Shallow
            };

            view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);

            var messages = _exchangeService.FindItems(WellKnownFolderName.Inbox, searchFilter, view).Items
                           .OfType <EmailMessage>()
                           .Select(n => new EmailMessageItem
            {
                MessageId = n.Id.UniqueId,
                Subject   = n.Subject.Trim()
            })
                           .Where(n => new Regex(_settingsService.SubjectRegexFilter).IsMatch(n.Subject))
                           .ToList();

            return(messages);
        }
コード例 #10
0
        public static FolderId FindFolder(Microsoft.Exchange.WebServices.Data.ExchangeService service)
        {
            var resultid     = new FolderId("0");
            var responseview = new FolderView(1);
            var filter       = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "sync-adressen");

            var folderresponse = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, filter, responseview);

            if (folderresponse.Count() == 1)
            {
                var responseview2   = new FolderView(1);
                var filter2         = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "sync-contacten");
                var folderresponse2 = service.FindFolders(folderresponse.First().Id, filter2, responseview2);
                if (folderresponse2.Count() == 1)
                {
                    var responseview3   = new FolderView(1);
                    var filter3         = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "syncContacts");
                    var folderresponse3 = service.FindFolders(folderresponse2.First().Id, filter3, responseview3);
                    if (folderresponse3.Count() == 1)
                    {
                        resultid = folderresponse3.First().Id;
                    }
                }
            }
            return(resultid);
        }
コード例 #11
0
        /// <summary>
        /// Creates the contact with categories.
        /// </summary>
        /// <param name="exchangeService">The exchange service.</param>
        public static async Task CreateContactWithCategories(ExchangeService exchangeService)
        {
            string  displayName = Guid.NewGuid().ToString();
            Contact contact     = new Contact(exchangeService);

            contact.DisplayName = displayName;
            contact.Department  = "Dept";
            contact.GivenName   = "First Name";
            contact.EmailAddresses.Add(new TypedEmailAddress()
            {
                Address = "*****@*****.**"
            });
            contact.Categories = new List <string>()
            {
                "MyContactCategory"
            };

            await contact.SaveAsync();

            SearchFilter searchFilter = new SearchFilter.IsEqualTo(
                ContactObjectSchema.DisplayName,
                displayName);

            ContactView contactView = new ContactView(10);

            contactView.PropertySet.Add(ContactObjectSchema.Categories);
            FindItemResults <Contact> contacts = await exchangeService.FindItems <Contact>(contactView, searchFilter);

            Assert.AreEqual(
                "MyContactCategory",
                contacts.Items[0].Categories[0]);

            await contacts.Items[0].DeleteAsync();
        }
コード例 #12
0
        /// <summary>
        /// Check if there's the duplicate appointment basing the Subject.
        /// </summary>
        private static Boolean HaveDuplicateAppointment(ExchangeService service, String appointmentSubject)
        {
            if (service == null || String.IsNullOrWhiteSpace(appointmentSubject))
            {
                return(true);
            }

            SearchFilter.RelationalFilter searchFilter =
                new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Calendar");
            Folder calendar = GetFolder(service, searchFilter);

            const Int32 pageSize    = 10;
            ItemView    itemView    = new ItemView(pageSize);
            PropertySet propertySet = new PropertySet(BasePropertySet.IdOnly);

            itemView.PropertySet = propertySet;

            searchFilter = new SearchFilter.IsEqualTo(AppointmentSchema.Subject, appointmentSubject);

            FindItemsResults <Item> findResults = calendar.FindItems(searchFilter, itemView);

            if (findResults.TotalCount > 0)
            {
                return(true);
            }

            return(false);
        }
        public static Contact FindContactByDisplayName(ExchangeService service, string DisplayName)
        {
            // Get the number of items in the Contacts folder. To keep the response smaller, request only the TotalCount property.
            ContactsFolder contactsfolder = ContactsFolder.Bind(service,
                                                                WellKnownFolderName.Contacts,
                                                                new PropertySet(BasePropertySet.IdOnly, FolderSchema.TotalCount));

            // Set the number of items to the smaller of the number of items in the Contacts folder or 1000
            int numItems = contactsfolder.TotalCount < 1000 ? contactsfolder.TotalCount : 1000;

            // Instantiate the item view with the number of items to retrieve from the Contacts folder.
            ItemView view = new ItemView(numItems);

            // To keep the request smaller, send only the display name.
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ContactSchema.DisplayName);

            //Create a searchfilter.
            SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(ContactSchema.DisplayName, DisplayName);

            // Retrieve the items in the Contacts folder with the properties you've selected.
            FindItemsResults <Item> contactItems = service.FindItems(WellKnownFolderName.Contacts, filter, view);

            if (contactItems.Count() == 1) //Only one contact was found
            {
                return((Contact)contactItems.Items[0]);
            }
            else //No contacts, or more than one contact with the same DisplayName, were found.
            {
                return(null);
            }
        }
コード例 #14
0
        private Folder GetOrCreateFolderCore(string folderName, FolderId parentFolder, Func <Folder> creator)
        {
            SearchFilter       filter             = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, folderName);
            FolderView         view               = new FolderView(1);
            FindFoldersResults findFoldersResults = this.InvokeServiceCall <FindFoldersResults>(() => this.Service.FindFolders(parentFolder, filter, view));

            if (findFoldersResults.Folders.Count == 0)
            {
                Folder folder = creator();
                folder.DisplayName = folderName;
                try
                {
                    this.InvokeServiceCall(delegate()
                    {
                        folder.Save(parentFolder);
                    });
                }
                catch (DataSourceOperationException ex)
                {
                    ServiceResponseException ex2 = ex.InnerException as ServiceResponseException;
                    if (ex2 == null || ex2.ErrorCode != 107)
                    {
                        throw;
                    }
                }
                findFoldersResults = this.InvokeServiceCall <FindFoldersResults>(() => this.Service.FindFolders(parentFolder, filter, view));
            }
            return(findFoldersResults.Folders[0]);
        }
コード例 #15
0
        public async Task <string> GetAppointMentUrl(string id)
        {
            try
            {
                var calendarFolder = await CalendarFolder.Bind(this._exchangeService, WellKnownFolderName.Calendar,
                                                               new PropertySet());

                var searchFilter = new SearchFilter.IsEqualTo(ItemSchema.Id, id);
                var appointments = await calendarFolder.FindItems(searchFilter, new ItemView(1));

                var list        = new List <AppointMentDto>();
                var appointment = appointments.First() as Appointment;
                if (appointment == null)
                {
                    return("");
                }
                await appointment.Load(new PropertySet(
                                           ItemSchema.Id,
                                           AppointmentSchema.JoinOnlineMeetingUrl));

                return(appointment.JoinOnlineMeetingUrl);
            }
            catch (Exception e)
            {
                return("");
            }
        }
コード例 #16
0
ファイル: HomeService.cs プロジェクト: aatkuri/GDPOfficeHours
        private CalendarFolder FindNamedCalendarFolder(string name, string email, string password)
        {
            CalendarFolder calendar;

            try
            {
                FolderView view = new FolderView(100);
                view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
                view.PropertySet.Add(FolderSchema.DisplayName);
                view.Traversal = FolderTraversal.Deep;

                SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.FolderClass, "IPF.Appointment");

                FindFoldersResults findFolderResults = Service(email, password).FindFolders(WellKnownFolderName.Root, sfSearchFilter, view);
                calendar = findFolderResults.Where(f => f.DisplayName.ToUpper().Equals(name.ToUpper())).Cast <CalendarFolder>().FirstOrDefault();
                if (calendar != null)
                {
                    return(calendar);
                }
                else
                {
                    return(CalendarFolder.Bind(Service(email, password), WellKnownFolderName.Calendar, new PropertySet()));
                }
            }
            catch
            {
                throw;
            }
        }
コード例 #17
0
        /// <summary>
        /// 获取邮件列表
        /// </summary>
        /// <param name="isRead">已读true/未读false</param>
        /// <param name="count">数量</param>
        /// <param name="config"></param>
        /// <returns>邮件列表</returns>
        public static List <EmailMessage> GetEmailList(bool isRead, int count, ExchangeAdminConfig config)
        {
            InitializeEws(config);
            List <EmailMessage> emails = new List <EmailMessage>();
            //创建过滤器
            SearchFilter            sf          = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, isRead);
            FindItemsResults <Item> findResults = null;

            try
            {
                findResults = Service.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(count));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            if (findResults != null)
            {
                foreach (Item item in findResults.Items)
                {
                    EmailMessage email = EmailMessage.Bind(Service, item.Id);
                    emails.Add(email);
                }
            }

            return(emails);
        }
コード例 #18
0
ファイル: Get_Folder.cs プロジェクト: tryinmybest/scorch
        protected override void ProcessRecord()
        {
            FindFoldersResults results;

            if (!FolderName.ToLower().Equals("inbox"))
            {
                SearchFilter folderFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, FolderName);
                FolderView   view         = new FolderView(int.MaxValue);
                view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
                view.PropertySet.Add(FolderSchema.DisplayName);
                view.Traversal = FolderTraversal.Deep;
                results        = mailboxConnection.FindFolders(WellKnownFolderName.MsgFolderRoot, folderFilter, view);
            }
            else
            {
                FolderId     folderID     = new FolderId(WellKnownFolderName.Inbox);
                SearchFilter folderFilter = new SearchFilter.IsEqualTo(FolderSchema.Id, folderID);
                FolderView   view         = new FolderView(int.MaxValue);
                view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
                view.PropertySet.Add(FolderSchema.DisplayName);
                view.Traversal = FolderTraversal.Deep;
                results        = mailboxConnection.FindFolders(WellKnownFolderName.MsgFolderRoot, folderFilter, view);
            }
            foreach (Folder folder in results)
            {
                WriteObject(folder);
            }
        }
コード例 #19
0
        // Resolve folder name to Folder object - the folder is expected to be immediately under the mailbox root
        public static Folder FindFolderByName(string folderName, ExchangeService service)
        {
            Logger.DebugFormat("Looking for folder named '{0}'", folderName);
            // Look for the folder under the mailbox root
            //var rootFolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot);
            FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, "*****@*****.**");
            var      rootFolder    = Folder.Bind(service, SharedMailbox, PropertySet.IdOnly);

            // Folder name should be equal to 'folderName'
            var folderFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, folderName);

            // No need to look for more than one folder (can't have more than one folder with the exact same name)
            var findFoldersResults = rootFolder.FindFolders(folderFilter, new FolderView(1));

            if (!findFoldersResults.Any())
            {
                Logger.InfoFormat("Couldn't find folder {0}", folderName);
                return(null);
            }

            Logger.DebugFormat("Found folder {0} ({1} matching folder items)", folderName, findFoldersResults.Count());

            var folder = findFoldersResults.First();

            return(folder);
        }
コード例 #20
0
        private void ReceiveEmailFromServer(ExchangeService service)
        {
            try
            {
                //创建过滤器, 条件为邮件未读.
                ItemView view = new ItemView(999);
                view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.IsRead);
                SearchFilter            filter      = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);
                FindItemsResults <Item> findResults = service.FindItems(WellKnownFolderName.Inbox,
                                                                        filter,
                                                                        view);

                foreach (Item item in findResults.Items)
                {
                    EmailMessage email = EmailMessage.Bind(service, item.Id);
                    if (!email.IsRead)
                    {
                        LoggerHelper.Logger.Info(email.Body);
                        //标记为已读
                        email.IsRead = true;
                        //将对邮件的改动提交到服务器
                        email.Update(ConflictResolutionMode.AlwaysOverwrite);
                        Object _lock = new Object();
                        lock (_lock)
                        {
                            DownLoadEmail(email.Subject, email.Body, ((System.Net.NetworkCredential)((Microsoft.Exchange.WebServices.Data.WebCredentials)service.Credentials).Credentials).UserName);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Logger.Error(ex, "ReceiveEmailFromServer Error");
            }
        }
コード例 #21
0
        public Folder GetVpnFolder(ExchangeService client, string inboxSubFolderNameWithVpnEmails = null)
        {
            var defaultFolder = Folder.Bind(client, WellKnownFolderName.Inbox);

            if (string.IsNullOrEmpty(inboxSubFolderNameWithVpnEmails))
            {
                return(defaultFolder);
            }
            // https://stackoverflow.com/questions/7912584/exchange-web-service-folderid-for-a-not-well-known-folder-name
            // var folderIdVpn = new FolderId(InboxSubFolderNameWithVpnEmails);

            var folderView = new FolderView(pageSize: 5);

            folderView.Traversal = FolderTraversal.Deep;             // Allows search in nested folders.

            var searchFilterVpnFolder = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, inboxSubFolderNameWithVpnEmails);
            var vpnFolders            = client.FindFolders(WellKnownFolderName.Inbox, searchFilterVpnFolder, folderView);

            Folder vpnFolder = null;

            if (vpnFolders.TotalCount > 0)
            {
                //var vpnFolderId = vpnFolders.Folders.Single().Id;
                var vpnFolderId = vpnFolders.Folders.FirstOrDefault()?.Id;
                vpnFolder = Folder.Bind(client, vpnFolderId);
            }
            else
            {
                vpnFolder = defaultFolder;
            }
            return(vpnFolder);
        }
コード例 #22
0
        private static IEnumerable <Item> GetConversationItemsSingleConversation(ExchangeService service, FolderId folderId, ConversationId conversationId)
        {
            var conversationIdProperty = new ExtendedPropertyDefinition(0x3013, MapiPropertyType.Binary);
            var cidBinary = Convert.FromBase64String(conversationId.UniqueId);
            var cidGuid   = new byte[16];

            Array.Copy(cidBinary, 43, cidGuid, 0, 16);

            var conversationIdValue = Convert.ToBase64String(cidGuid);
            var itempropertyset     = new PropertySet(BasePropertySet.FirstClassProperties)
            {
                RequestedBodyType = BodyType.Text
            };
            var itemview = new ItemView(100)
            {
                PropertySet = itempropertyset
            };

            // {
            // PropertySet = new PropertySet(
            // BasePropertySet.IdOnly,
            // ItemSchema.DateTimeReceived,
            // ItemSchema.LastModifiedName,
            // ItemSchema.DisplayTo,
            // ItemSchema.DisplayCc,
            // ItemSchema.Subject)
            // };
            var conversationFilter = new SearchFilter.IsEqualTo(conversationIdProperty, conversationIdValue);
            var items = service.FindItems(folderId, conversationFilter, itemview);

            return(items);
        }
コード例 #23
0
        /// <summary>
        /// Provides a record-by-record processing functionality for the cmdlet.
        /// </summary>
        protected override void ProcessRecord()
        {
            // Create the Exchange Service Object and auth with bearer token
            ExchangeService exchangeService = new ExchangeService(new AuthenticationProvider(), this.SmtpAddress, RestEnvironment.OutlookBeta);

            FolderView         folderView         = new FolderView(10);
            FindFoldersResults findFoldersResults = null;

            do
            {
                SearchFilter searchFilter = new SearchFilter.IsEqualTo(MailFolderObjectSchema.DisplayName, this.FolderName);
                findFoldersResults = exchangeService.FindFolders(this.FolderRoot, searchFilter, folderView);
                folderView.Offset += folderView.PageSize;
                foreach (MailFolder folder in findFoldersResults)
                {
                    if (!this.Force && !this.ShouldContinue(string.Format("This is a hard delete operation. Are you sure you want to delete mail folder {0}?", this.FolderName), "Hard Delete Folder", true, ref this.yesToAll, ref this.noToAll))
                    {
                        return;
                    }

                    // Hard delete the folder
                    folder.Delete();
                }
            }while (findFoldersResults.MoreAvailable);
        }
コード例 #24
0
        /// <summary>
        /// gets mail content for the passed in mailid.
        /// </summary>
        /// <param name="mailId"></param>
        /// <returns></returns>
        public byte[] GetEmailContent(string mailId)
        {
            string          mailGraphUrl = $"{generalSettings.GraphUrl}/v1.0/me/messages/{mailId}";
            string          jsonResponse = MakeGetRequestForString(mailGraphUrl);
            var             mail         = JsonConvert.DeserializeObject <MailMessage>(jsonResponse);
            var             bytes        = (dynamic)null;
            ExchangeService service      = new ExchangeService(ExchangeVersion.Exchange2013);
            string          accessToken  = spoAuthorization.GetExchangeAccessToken();

            service.Credentials           = new OAuthCredentials(accessToken);
            service.UseDefaultCredentials = false;
            service.Url                 = new Uri(generalSettings.ExchangeServiceURL.ToString());
            service.PreAuthenticate     = true;
            service.SendClientLatencies = true;
            service.EnableScpLookup     = false;
            mailId = mail.Id.Replace("_", "+");
            PropertySet             propSet     = new PropertySet(BasePropertySet.FirstClassProperties);
            Folder                  folder      = Folder.Bind(service, WellKnownFolderName.Inbox, propSet);
            SearchFilter            filter      = new SearchFilter.IsEqualTo(ItemSchema.Id, mailId);
            FindItemsResults <Item> findResults = service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(1));

            foreach (var item in findResults)
            {
                item.Load(new PropertySet(EmailMessageSchema.MimeContent));
                return(item?.MimeContent?.Content);
            }
            return(bytes);
        }
コード例 #25
0
        /// <summary>
        /// CRUD task operations.
        /// </summary>
        /// <param name="exchangeService">Exchange service.</param>
        public static void CreateUpdateReadDeleteTasks(ExchangeService exchangeService)
        {
            FolderId tasksFolderId = new TaskFolderId("me");
            string   subject       = Guid.NewGuid().ToString();

            Task task = new Task(exchangeService);

            task.Body = new ItemBody()
            {
                ContentType = BodyType.HTML,
                Content     = "This is test task."
            };

            task.Subject     = subject;
            task.AssignedTo  = AppConfig.MailboxB;
            task.Importance  = Importance.High;
            task.DueDateTime = new DateTimeTimeZone()
            {
                DateTime = DateTime.Now.AddDays(2),
                TimeZone = "UTC"
            };

            task.Save(tasksFolderId);
            Assert.IsNotNull(task.Id);

            task.Importance  = Importance.Low;
            task.DueDateTime = new DateTimeTimeZone()
            {
                DateTime = DateTime.Now.AddDays(5),
                TimeZone = "UTC"
            };

            task.Update();

            Assert.AreEqual(
                Importance.Low,
                task.Importance);

            SearchFilter searchFilter = new SearchFilter.IsEqualTo(
                TaskObjectSchema.Subject,
                subject);
            FindItemsResults <Item> tasks = exchangeService.FindItems(
                tasksFolderId,
                searchFilter,
                new TaskView(10));

            Assert.AreEqual(
                1,
                tasks.TotalCount);

            IList <Task> completedTasks = task.Complete();

            Assert.AreEqual(
                1,
                completedTasks.Count);

            task.Delete();
            Assert.IsNull(task.Id);
        }
コード例 #26
0
        public MailboxDiscoverySearch FindByLegacySearchObjectIdentity(string legacySearchObjectIdentity)
        {
            Util.ThrowOnNullOrEmptyArgument(legacySearchObjectIdentity, "legacySearchObjectIdentity");
            SearchFilter filter = new SearchFilter.IsEqualTo(MailboxDiscoverySearchSchema.LegacySearchObjectIdentity.StorePropertyDefinition, legacySearchObjectIdentity);
            IEnumerable <MailboxDiscoverySearch> source = this.InternalFindPaged <MailboxDiscoverySearch>(filter, null, false, null, 1, new ProviderPropertyDefinition[0]);

            return(source.FirstOrDefault <MailboxDiscoverySearch>());
        }
コード例 #27
0
        static Dictionary <string, Folder> GetSharedCalendarFolders(ExchangeService service, String searchIn = "My Calendars")
        {
            Dictionary <String, Folder> rtList = new Dictionary <string, Folder>();

            FolderId           rfRootFolderid = new FolderId(WellKnownFolderName.Root);//, mbMailboxname
            FolderView         fvFolderView   = new FolderView(1000);
            SearchFilter       sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Common Views");
            FindFoldersResults ffoldres       = service.FindFolders(rfRootFolderid, sfSearchFilter, fvFolderView);

            if (ffoldres.Folders.Count == 1)
            {
                PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
                ExtendedPropertyDefinition PidTagWlinkAddressBookEID = new ExtendedPropertyDefinition(0x6854, MapiPropertyType.Binary);
                ExtendedPropertyDefinition PidTagWlinkFolderType     = new ExtendedPropertyDefinition(0x684F, MapiPropertyType.Binary);
                ExtendedPropertyDefinition PidTagWlinkGroupName      = new ExtendedPropertyDefinition(0x6851, MapiPropertyType.String);

                psPropset.Add(PidTagWlinkAddressBookEID);
                psPropset.Add(PidTagWlinkFolderType);
                ItemView iv = new ItemView(1000);
                iv.PropertySet = psPropset;
                iv.Traversal   = ItemTraversal.Associated;

                SearchFilter            cntSearch = new SearchFilter.IsEqualTo(PidTagWlinkGroupName, searchIn);
                FindItemsResults <Item> fiResults = ffoldres.Folders[0].FindItems(cntSearch, iv);
                foreach (Item itItem in fiResults.Items)
                {
                    try {
                        object GroupName           = null;
                        object WlinkAddressBookEID = null;
                        if (itItem.TryGetProperty(PidTagWlinkAddressBookEID, out WlinkAddressBookEID))
                        {
                            byte[] ssStoreID    = (byte[])WlinkAddressBookEID;
                            int    leLegDnStart = 0;
                            String lnLegDN      = "";
                            for (int ssArraynum = (ssStoreID.Length - 2); ssArraynum != 0; ssArraynum--)
                            {
                                if (ssStoreID[ssArraynum] == 0)
                                {
                                    leLegDnStart = ssArraynum;
                                    lnLegDN      = System.Text.Encoding.ASCII.GetString(ssStoreID, leLegDnStart + 1, (ssStoreID.Length - (leLegDnStart + 2)));
                                    ssArraynum   = 1;
                                }
                            }
                            NameResolutionCollection ncCol = service.ResolveName(lnLegDN, ResolveNameSearchLocation.DirectoryOnly, true);
                            if (ncCol.Count > 0)
                            {
                                FolderId SharedCalendarId    = new FolderId(WellKnownFolderName.Calendar, ncCol[0].Mailbox.Address);
                                Folder   SharedCalendaFolder = Folder.Bind(service, SharedCalendarId);
                                rtList.Add(ncCol[0].Mailbox.Address, SharedCalendaFolder);
                            }
                        }
                    } catch (Exception exception) {
                        Console.WriteLine(exception.Message);
                    }
                }
            }
            return(rtList);
        }
コード例 #28
0
        /// <summary>
        /// CRUD operation for event.
        /// </summary>
        /// <param name="exchangeServiceA"></param>
        /// <param name="exchangeServiceB"></param>
        /// <returns></returns>
        public static async Task CreateReadUpdateDeleteEvent(ExchangeService exchangeServiceA, ExchangeService exchangeServiceB)
        {
            string subject       = Guid.NewGuid().ToString();
            Event  calendarEvent = new Event(exchangeServiceA);

            calendarEvent.Body = new ItemBody()
            {
                Content     = "test",
                ContentType = BodyType.Html
            };

            calendarEvent.Subject = subject;
            calendarEvent.Start   = new DateTimeTimeZone()
            {
                DateTime = DateTimeHelper.GetFormattedDateTime().ToString("yyyy-MM-ddThh:mm:ss"),
                TimeZone = "Central European Standard Time"
            };

            calendarEvent.End = new DateTimeTimeZone()
            {
                DateTime = DateTimeHelper.GetFormattedDateTime(5).ToString("yyyy-MM-ddThh:mm:ss"),
                TimeZone = "Central European Standard Time"
            };

            calendarEvent.Attendees = new List <Attendee>()
            {
                new Attendee()
                {
                    EmailAddress = new EmailAddress()
                    {
                        Address = AppConfig.MailboxB
                    }
                }
            };

            await calendarEvent.SaveAsync();

            DateTime created = DateTime.Now;

            Thread.Sleep(8000); // allow item to be delivered to mailbox b
            SearchFilter subjectFilter = new SearchFilter.IsEqualTo(
                EventObjectSchema.Subject,
                subject);

            FindItemResults <Event> items = await exchangeServiceB.FindItems <Event>(new EventView(), subjectFilter);

            Assert.AreEqual(
                1,
                items.TotalCount);


            Event meeting = (Event)items.Items[0];
            await meeting.Decline(
                "no comment",
                true);

            await calendarEvent.DeleteAsync();
        }
コード例 #29
0
ファイル: Filters.cs プロジェクト: xudabeauty/ewsmail
        //根据发件人过滤
        public static SearchFilter filterBYSender(string senderAddress)
        {
            EmailAddress sender = new EmailAddress(senderAddress);

            SearchFilter senderFilter =
                new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, sender);

            return(senderFilter);
        }
コード例 #30
0
ファイル: Filters.cs プロジェクト: xudabeauty/ewsmail
        //根据收件人过滤
        public static SearchFilter filterByReciver(string fromAddress)
        {
            EmailAddress emailAddress = new EmailAddress(fromAddress);

            SearchFilter senderFilter =
                new SearchFilter.IsEqualTo(EmailMessageSchema.ReceivedBy, emailAddress);

            return(senderFilter);
        }