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(); }
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(); }