From 5c8b21898e6182659501a28ec259c16de5e570fb Mon Sep 17 00:00:00 2001 From: Artem Niehrieiev Date: Wed, 2 Jul 2025 11:32:31 +0000 Subject: [PATCH 1/2] fix: filter out demo emails and validate email format before sending reminders --- backend/src/entities/cron-jobs/cron-jobs.service.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/src/entities/cron-jobs/cron-jobs.service.ts b/backend/src/entities/cron-jobs/cron-jobs.service.ts index fc9bf228a..8bacf03bf 100644 --- a/backend/src/entities/cron-jobs/cron-jobs.service.ts +++ b/backend/src/entities/cron-jobs/cron-jobs.service.ts @@ -59,8 +59,16 @@ export class CronJobsService { Constants.EXCEPTIONS_CHANNELS, ); - const emails = await this.checkUsersActionsAndMailingUsersUseCase.execute(); - await slackPostMessage(`found ${emails.length} emails. starting messaging`, Constants.EXCEPTIONS_CHANNELS); + let emails = await this.checkUsersActionsAndMailingUsersUseCase.execute(); + emails = emails.filter((email) => { + if (email && /^demo_.*@rocketadmin\.com$/i.test(email)) { + return false; + } + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + return email && emailRegex.test(email); + }); + + await slackPostMessage(`found ${emails.length} valid emails. starting messaging`, Constants.EXCEPTIONS_CHANNELS); const mailingResults = await this.emailService.sendRemindersToUsers(emails); if (mailingResults.length === 0) { const mailingResultToString = 'Sending emails triggered, but no emails sent (no users found)'; From 6030cd5a98683fd6ebdd640685adeaed011e3adf Mon Sep 17 00:00:00 2001 From: Artem Niehrieiev Date: Wed, 2 Jul 2025 11:35:11 +0000 Subject: [PATCH 2/2] refactor: improve email validation logic using ValidationHelper --- backend/src/entities/cron-jobs/cron-jobs.service.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/entities/cron-jobs/cron-jobs.service.ts b/backend/src/entities/cron-jobs/cron-jobs.service.ts index 8bacf03bf..8b820a290 100644 --- a/backend/src/entities/cron-jobs/cron-jobs.service.ts +++ b/backend/src/entities/cron-jobs/cron-jobs.service.ts @@ -4,14 +4,15 @@ import { InjectRepository } from '@nestjs/typeorm'; import Sentry from '@sentry/minimal'; import { Repository } from 'typeorm'; import { UseCaseType } from '../../common/data-injection.tokens.js'; -import { slackPostMessage } from '../../helpers/index.js'; import { Constants } from '../../helpers/constants/constants.js'; +import { slackPostMessage } from '../../helpers/index.js'; +import { ValidationHelper } from '../../helpers/validators/validation-helper.js'; +import { EmailService, ICronMessagingResults } from '../email/email/email.service.js'; import { ICheckUsersActionsAndMailingUsers, ICheckUsersLogsAndUpdateActionsUseCase, } from '../user-actions/use-cases/use-cases-interfaces.js'; import { JobListEntity } from './job-list.entity.js'; -import { EmailService, ICronMessagingResults } from '../email/email/email.service.js'; @Injectable() export class CronJobsService { constructor( @@ -64,8 +65,7 @@ export class CronJobsService { if (email && /^demo_.*@rocketadmin\.com$/i.test(email)) { return false; } - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return email && emailRegex.test(email); + return ValidationHelper.isValidEmail(email); }); await slackPostMessage(`found ${emails.length} valid emails. starting messaging`, Constants.EXCEPTIONS_CHANNELS);