diff --git a/lib/services/email-service.ts b/lib/services/email-service.ts index 8e6bb09c..92e8e868 100644 --- a/lib/services/email-service.ts +++ b/lib/services/email-service.ts @@ -1379,4 +1379,50 @@ export async function testEmailConnection(credentials: EmailCredentials): Promis error: `IMAP connection failed: ${error instanceof Error ? error.message : 'Unknown error'}` }; } +} + +/** + * Force recaching of user credentials + * This function is used to refresh credentials in Redis cache + */ +export async function forceRecacheUserCredentials(userId: string): Promise { + try { + // Get credentials from database + const accounts = await prisma.mailCredentials.findMany({ + where: { userId } + }); + + if (!accounts || accounts.length === 0) { + console.log(`No email accounts found for user ${userId}`); + return false; + } + + // Recache each account's credentials + for (const account of accounts) { + const credentials: EmailCredentials = { + host: account.host, + port: account.port, + email: account.email, + password: account.password, + secure: account.secure, + smtp_host: account.smtp_host || undefined, + smtp_port: account.smtp_port || undefined, + smtp_secure: account.smtp_secure || undefined, + display_name: account.display_name || undefined, + color: account.color || undefined + }; + + await cacheEmailCredentials(userId, account.id, credentials); + console.log(`Recached credentials for user ${userId}, account ${account.id}`); + + // Invalidate other caches related to this account + await invalidateFolderCache(userId, account.id, '*'); + await invalidateEmailContentCache(userId, account.id, '*'); + } + + return true; + } catch (error) { + console.error(`Error recaching credentials for user ${userId}:`, error); + return false; + } } \ No newline at end of file