public async Task GetAllMailsAsync() { _retrievalClient.SetMailFolder(_settings.MailFolderName); var uIds = await _retrievalClient.GetUIds(new ImapFilter()); var existingMails = await _repo.GetExistingUidsAsync(_settings.MailFolderName); var existingUids = existingMails.Select(x => x.UniqueId).ToList(); ImapFilter uIdFilter = new(); if (existingUids.Count > 0) { uIdFilter = new ImapFilter().Uids(uIds.Where(x => !existingUids.Contains(x.Id)).ToList()); } await foreach (var imapMessage in _mailConverter.GetMessagesAsync(uIdFilter)) { try { var email = await _repo.SaveEmailAsync(imapMessage); if (email == null) { _logger.LogInformation($"Email from imap folder '{imapMessage.MailFolder}', uId '{imapMessage.UId}' could not be saved to database."); continue; } var fullFileName = Path.Combine(_settings.DownloadDirectory, EXPORT_PATH, CleanUpMailFolderName(_settings.MailFolderName), email.FileName + IME_FILE_EXTENSION); if (!await _fileSystem.TryWriteAllBytesAsync(fullFileName, imapMessage.MimeMessageBytes)) { await _repo.DeleteEmailAsync(email); _logger.LogInformation($"Email from imap folder '{imapMessage.MailFolder}', uId '{imapMessage.UId}' could not be saved to disc."); } } catch (System.Exception ex) { _logger.LogError(ex.Message); } } }