feat: verarbeitete/ignorierte E-Mails beim Prüfen in IMAP-Ordner verschieben
Build and Push Multi-Platform Images / build-and-push (push) Successful in 38s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 38s
- Cleanup-Cron von EmailDownloadService in ImapFolderService verschoben, damit er auch aus EmailController aufrufbar ist (zirkuläre Abhängigkeit vermieden) - Beim Klick auf „Anhänge prüfen" wird der IMAP-Cleanup fire-and-forget gestartet - Beim Klick auf „Bereits verarbeitete Anhänge prüfen" werden zusätzlich alle E-Mails im IMAP-Posteingang, die in der DB als verarbeitet (Status 1) oder ignoriert (Status 3) markiert sind, in den Ordner „importiert" verschoben - Erfolgsmeldung zeigt Anzahl verschobener E-Mails an Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -68,47 +68,6 @@ export class EmailDownloadService {
|
||||
});
|
||||
}
|
||||
|
||||
@Cron('0 3 * * *', { timeZone: 'Europe/Berlin' })
|
||||
async cleanupImportedEmails(): Promise<void> {
|
||||
if (!this.configService.get<string>('IMAP_HOST')) return;
|
||||
const importedFolder = this.configService.get<string>('IMAP_IMPORTED_FOLDER', 'importiert');
|
||||
const trashFolder = this.configService.get<string>('IMAP_TRASH_FOLDER', 'Trash');
|
||||
const client = this.createImapClient();
|
||||
try {
|
||||
await client.connect();
|
||||
|
||||
// E-Mails älter als 90 Tage in Papierkorb verschieben
|
||||
try {
|
||||
await client.mailboxOpen(importedFolder);
|
||||
const cutoff = new Date();
|
||||
cutoff.setDate(cutoff.getDate() - 90);
|
||||
const oldUids = await client.search({ before: cutoff }, { uid: true });
|
||||
if (Array.isArray(oldUids) && oldUids.length > 0) {
|
||||
await client.messageMove(oldUids, trashFolder, { uid: true });
|
||||
this.logger.log(`${oldUids.length} alte E-Mail(s) aus "${importedFolder}" in "${trashFolder}" verschoben.`);
|
||||
}
|
||||
} catch (err: any) {
|
||||
this.logger.warn(`Bereinigung "${importedFolder}" nicht möglich: ${err.message}`);
|
||||
}
|
||||
|
||||
// Papierkorb leeren
|
||||
try {
|
||||
await client.mailboxOpen(trashFolder);
|
||||
const trashUids = await client.search({ all: true }, { uid: true });
|
||||
if (Array.isArray(trashUids) && trashUids.length > 0) {
|
||||
await client.messageDelete(trashUids, { uid: true });
|
||||
this.logger.log(`${trashUids.length} E-Mail(s) aus "${trashFolder}" gelöscht.`);
|
||||
}
|
||||
} catch (err: any) {
|
||||
this.logger.warn(`Papierkorb "${trashFolder}" konnte nicht geleert werden: ${err.message}`);
|
||||
}
|
||||
} catch (err: any) {
|
||||
this.logger.error(`IMAP-Cleanup fehlgeschlagen: ${err.message}`);
|
||||
} finally {
|
||||
await client.logout().catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
private async fetchAndStore(): Promise<void> {
|
||||
const host = this.configService.get<string>('IMAP_HOST');
|
||||
const user = this.configService.get<string>('IMAP_USERNAME');
|
||||
|
||||
Reference in New Issue
Block a user