public RetrievalTests() { Credentials = ConfigHelper.GetCredentials(); RetrievalConfiguration = ConfigHelper.GetRetrievalConfiguration(); Mail2DB = new GenericClient(Credentials); Converter = new MailTypeConverter(Mail2DB); DefaultFilter = new ImapFilter().NotSeen(); // younger than two days }
public ImapService(IRetrievalClient retrievalClient, ILookupRepository repo, IFileSystem fileSystem, AppSettings settings, ILogger <ImapService> logger) { _mailConverter = new MailTypeConverter(retrievalClient); _retrievalClient = retrievalClient; _repo = repo; _fileSystem = fileSystem; _settings = settings; _logger = logger; }
private async Task <ImeFile> GetSingleImeFileAsync(CancellationToken cancellationToken = default) { var bytes = await File.ReadAllBytesAsync(_settings.ImeFilePath, cancellationToken); var imapMessage = await MailTypeConverter.DeserializeMimeMessageAsync(bytes, null); return(new ImeFile() { FileInfo = new System.IO.FileInfo(_settings.ImeFilePath), ImapMessage = imapMessage }); }
public async Task Deserialisation() { var list = await Converter.GetMessages(new ImapFilter().Uids(RetrievalConfiguration.UidWithAttachments)); var oneMsg = list.FirstOrDefault(); oneMsg.Should().NotBeNull(); var imapMsg = await MailTypeConverter.DeserializeMimeMessageAsync(oneMsg.MimeMessageBytes, oneMsg.UId); oneMsg.Subject.Should().Be(imapMsg.Subject); Console.WriteLine("Deserialized message subject: '" + imapMsg.Subject + "'"); }
private async IAsyncEnumerable <ImeFile> GetFilesInDirectoryAsync([EnumeratorCancellation] CancellationToken cancellationToken = default) { var files = Directory.GetFiles(_settings.InputDirectoryPath, "*.ime"); foreach (var file in files.Select(x => new FileInfo(x))) { var bytes = await File.ReadAllBytesAsync(file.FullName, cancellationToken); yield return(new ImeFile { FileInfo = file, ImapMessage = await MailTypeConverter.DeserializeMimeMessageAsync(bytes, null) }); } }
private async Task ProcessAccount(Credentials imapCreds, DataAccount account) { var mail2db = new Client(imapCreds); var converter = new MailTypeConverter(mail2db); var availableFolders = await mail2db.GetMailFolders(); var folders = mailFolders.IntersectCaseIgnore(availableFolders).ToList(); var filter = new ImapFilter(); foreach (var mailFolder in folders) { if (InvalidMailfolder(mailFolder)) { continue; } try { mail2db.SetMailFolder(mailFolder); var countInFolder = await mail2db.GetTotalMailCount(); if (mail2db.OpenedMailFolder.IsNullOrEmpty()) { continue; } Console.WriteLine($"{account.EmailAddress} mail folder: '{mail2db.OpenedMailFolder}'"); Console.WriteLine($"Total Count: {countInFolder}"); var savedMessages = await db.Query(SqlBase <DataMessage> .TableName) .Select(nameof(DataMessage.EmailAccountId), nameof(DataMessage.UId), nameof(DataMessage.MailFolder)) .Where(new { EmailAccountId = account.Id, MailFolder = mailFolder }) .GetAsync <DataMessage>(); Console.WriteLine("Existing Uids: {0}", savedMessages.Count()); Console.WriteLine("===================\n"); converter.UIdsToExclude = savedMessages.Select(x => x.UId).ToArray(); async Task ProcessImapMessage(ImapMessage item) { //var TA = db.Connection.BeginTransaction(); Console.WriteLine("Saving: {0}\t{1}\"{2}\"", item?.ReceivedAtLocal, SpacePadding(item?.From?.EmailAddress), item?.Subject); try { if (!savedMessages.MessageExists(item.UId, item.MailFolder, account.Id)) { var msgId = await db.Query(SqlBase <DataMessage> .TableName).InsertGetIdAsync <uint>(item.ToData(account.Id)); foreach (var contact in item.ToDataContact(msgId)) { await db.Query(SqlBase <DataContact> .TableName).InsertAsync(contact); } if (item.HasAttachments) { foreach (var file in item.ToAttachment(msgId)) { Console.WriteLine("Saving Attachment: {0}", file.Filename); await db.Query(SqlBase <DataAttachment> .TableName).InsertAsync(file); } } } //TA.Commit(); } catch (Exception ex) { //TA.Rollback(); Console.WriteLine(ex.Message); } } await converter.GetMessagesAsync(ProcessImapMessage, filter); } catch (Exception ex2) { Console.WriteLine(ex2.Message); } GC.Collect(); Console.WriteLine("\n"); } }