diff --git a/src/email/client.ts b/src/email/client.ts index 6fc0159..30bb7d5 100644 --- a/src/email/client.ts +++ b/src/email/client.ts @@ -2,6 +2,7 @@ import { Inject, Injectable } from '@nestjs/common' import { ConfigService } from '@nestjs/config' import * as Imap from 'imap' import { MailParser, ParsedEmail } from 'mailparser-mit' +import { NtfyProvider } from 'src/ntfy/provider' import { LoggerService } from '../logger/service.logger' import { Email } from './types' @@ -23,6 +24,9 @@ export class EmailClient { @Inject(LoggerService) private readonly loggerService: LoggerService, + @Inject(NtfyProvider) + private readonly ntfyProvider: NtfyProvider, + @Inject(ConfigService) private readonly configService: ConfigService, ) { @@ -230,8 +234,9 @@ export class EmailClient { } }) - this.imapClient.on('error', (error: Error) => { + this.imapClient.on('error', async (error: Error) => { this.loggerService.error(`Error with imap client ${error.message}`) + await this.ntfyProvider.sendEmailClientErrorNotification(error.message) this.setStatus(EmailClientStatus.Error) }) } diff --git a/src/email/module.ts b/src/email/module.ts index c7d2536..332da7e 100644 --- a/src/email/module.ts +++ b/src/email/module.ts @@ -2,6 +2,7 @@ import { BullModule } from '@nestjs/bull' import { Module } from '@nestjs/common' import { LoggerModule } from '../logger/module' +import { NtfyModule } from '../ntfy/module' import { EmailClient } from './client' import { EMAILS_QUEUE_NAME } from './config' import { EmailProvider } from './provider' @@ -10,6 +11,7 @@ import { EmailProvider } from './provider' imports: [ LoggerModule, BullModule.registerQueueAsync({ name: EMAILS_QUEUE_NAME }), + NtfyModule, ], providers: [EmailClient, EmailProvider], exports: [EmailClient, EmailProvider], diff --git a/src/ntfy/provider.ts b/src/ntfy/provider.ts index 0d76390..aede038 100644 --- a/src/ntfy/provider.ts +++ b/src/ntfy/provider.ts @@ -131,4 +131,14 @@ export class NtfyProvider implements OnApplicationBootstrap { }), ) } + + async sendEmailClientErrorNotification(errorMessage: string) { + await this.publishQueue.add( + ...NtfyProvider.defaultJob({ + title: 'Email client error', + message: errorMessage, + tags: [MessageTags.exclamation], + }), + ) + } }