private async Task Selector(KeyValuePair <string, ImapService> service)
        {
            var client = await service.Value.CreateClientAndConnect();

            if (client == null)
            {
                return;
            }

            var data = service.Value.GetData();

            var inbox = client.Inbox;
            await inbox.OpenAsync(FolderAccess.ReadOnly);

            var emailIds =
                await inbox.SearchAsync(new DateSearchQuery(SearchTerm.SentAfter,
                                                            data.LastCheck.GetValueOrDefault(data.PairedDate)));


            foreach (var emailId in emailIds)
            {
                var email = await inbox.GetMessageAsync(emailId);

                var trigger = new ReceivedEmailTrigger()
                {
                    Data = new ReceivedEmailTriggerData()
                    {
                        Body              = email.GetTextBody(TextFormat.Plain),
                        Subject           = email.Subject,
                        FromEmail         = email.From.ToString(),
                        ExternalServiceId = service.Key
                    }
                };
                _ = _triggerDispatcher.DispatchTrigger(trigger);
            }

            data.LastCheck = DateTime.Now;
            service.Value.SetData(data);
            await _externalServiceManager.UpdateInternalData(service.Key, data);

            await client.DisconnectAsync(true);

            client.Dispose();
        }
Example #2
0
        private async Task Selector(KeyValuePair <string, Pop3Service> service)
        {
            var pop3Client = await service.Value.CreateClientAndConnect();

            if (pop3Client == null)
            {
                return;
            }

            var data = service.Value.GetData();



            var validEmails = pop3Client.Select((message, i) => (message, i)).Where(tuple =>
                                                                                    !data.LastCheck.HasValue ||
                                                                                    tuple.Item1.Date >= data.LastCheck.Value).Select(tuple => tuple.Item2).ToList();



            var emails = await pop3Client.GetMessagesAsync(validEmails);

            foreach (var email in emails)
            {
                var trigger = new ReceivedEmailTrigger()
                {
                    Data = new ReceivedEmailTriggerData()
                    {
                        Body              = email.GetTextBody(TextFormat.Plain),
                        Subject           = email.Subject,
                        FromEmail         = email.From.ToString(),
                        ExternalServiceId = service.Key
                    }
                };
                _ = _triggerDispatcher.DispatchTrigger(trigger);
            }

            data.LastCheck = DateTime.Now;
            service.Value.SetData(data);
            await _externalServiceManager.UpdateInternalData(service.Key, data);

            await pop3Client.DisconnectAsync(true);

            pop3Client.Dispose();
        }