diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs index 4244b99..ccbc0b3 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs @@ -33,10 +33,10 @@ public class LimilabsImapEmailService( MailSearchFilter filter, CancellationToken cancellationToken = default) { - using var imap = new Imap(); + using var imap = await OpenAsync(account, filter.Folder); try { - var uids = await FetchEmailUidsAsync(imap, account, filter, cancellationToken); + var uids = await FetchEmailUidsAsync(imap, filter, cancellationToken); if (uids.Count == 0) return []; @@ -84,13 +84,10 @@ public class LimilabsImapEmailService( MailSearchFilter filter, CancellationToken cancellationToken = default) { - using var imap = new Imap(); + using var imap = await OpenAsync(account, filter.Folder); try { - await ConnectAndAuthenticateAsync(imap, account); - await SelectFolderAsync(imap, filter.Folder); - - List uids = await FetchEmailUidsAsync(imap, account, filter, cancellationToken); + List uids = await FetchEmailUidsAsync(imap, filter, cancellationToken); await imap.CloseAsync(cancellationToken); return uids; @@ -116,12 +113,9 @@ public class LimilabsImapEmailService( bool withAttachments = false, CancellationToken cancellationToken = default) { - using var imap = new Imap(); + using var imap = await OpenAsync(account, folder); try { - await ConnectAndAuthenticateAsync(imap, account); - await SelectFolderAsync(imap, folder); - var mail = await FetchEmailByUidAsync(imap, uid, withAttachments, cancellationToken); await imap.CloseAsync(cancellationToken); @@ -147,11 +141,9 @@ public class LimilabsImapEmailService( string folder = "INBOX", CancellationToken cancellationToken = default) { - using var imap = new Imap(); + using var imap = await OpenAsync(account, folder); try { - await ConnectAndAuthenticateAsync(imap, account); - await SelectFolderAsync(imap, folder); await imap.MarkMessageSeenByUIDAsync(uid, cancellationToken); await imap.CloseAsync(cancellationToken); } @@ -172,13 +164,9 @@ public class LimilabsImapEmailService( // Private helpers private async Task> FetchEmailUidsAsync( Imap imap, - EmailAccountDto account, MailSearchFilter filter, CancellationToken cancellationToken = default) { - await ConnectAndAuthenticateAsync(imap, account); - await SelectFolderAsync(imap, filter.Folder); - List criterions = []; if (filter.UnseenOnly) @@ -286,8 +274,10 @@ public class LimilabsImapEmailService( return withAttachments || email is null ? email : email with { Attachments = [] }; } - private async Task ConnectAndAuthenticateAsync(Imap imap, EmailAccountDto account) + private async Task OpenAsync(EmailAccountDto account, string folder) { + var imap = new Imap(); + if (account.ImapUseSsl) await imap.ConnectSSLAsync(account.ImapServer!, account.ImapPort); else @@ -298,13 +288,12 @@ public class LimilabsImapEmailService( : account.Password; await imap.LoginAsync(account.Username, password); - } - private static async Task SelectFolderAsync(Imap imap, string folder) - { if (string.Equals(folder, "INBOX", StringComparison.OrdinalIgnoreCase)) await imap.SelectInboxAsync(); else await imap.SelectAsync(folder); + + return imap; } }