Refine suppression list to include only affected recipients (#339)

This commit is contained in:
Thiago Praxedes
2026-01-17 03:00:43 -03:00
committed by GitHub
parent 68d951c55a
commit 83119f97c8
+26 -1
View File
@@ -115,12 +115,28 @@ export async function parseSesHook(data: SesEvent) {
mailStatus === EmailStatus.BOUNCED &&
(mailData as SesBounce).bounceType === "Permanent";
// Fix: Only add the actual bounced/complained recipients to suppression list
// Add emails to suppression list for hard bounces and complaints
if (isHardBounced || mailStatus === EmailStatus.COMPLAINED) {
logger.info("Adding emails to suppression list");
const recipientEmails = Array.isArray(email.to) ? email.to : [email.to];
// Get the actual affected recipients from the event data
let recipientEmails: string[] = [];
if (isHardBounced && data.bounce?.bouncedRecipients) {
// For bounces, only add the recipients that actually bounced
recipientEmails = data.bounce.bouncedRecipients.map(
(recipient) => recipient.emailAddress
);
} else if (mailStatus === EmailStatus.COMPLAINED && data.complaint?.complainedRecipients) {
// For complaints, only add the recipients that actually complained
recipientEmails = data.complaint.complainedRecipients.map(
(recipient) => recipient.emailAddress
);
}
// Only proceed if we have affected recipients
if (recipientEmails.length > 0) {
try {
await Promise.all(
recipientEmails.map((recipientEmail) =>
@@ -154,6 +170,15 @@ export async function parseSesHook(data: SesEvent) {
);
// Don't throw error - continue processing the webhook
}
} else {
logger.warn(
{
emailId: email.id,
eventType: data.eventType,
},
"No affected recipients found in bounce/complaint event data",
);
}
}
if (