From 8e746b8338e6e66cfb568b7ec220a4706f403611 Mon Sep 17 00:00:00 2001 From: TheRealToxicDev Date: Fri, 23 Oct 2026 09:04:55 -0600 Subject: [PATCH] fix: some spam possibilities --- CHANGELOG.md | 1 + apps/web/src/server/service/email-queue-service.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbaa523..caa32db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Receiving DNS records for a sending domain that is a subdomain are now named from the root domain, the same as the sending records, so they can be copied straight into your DNS provider - The DMARC page accepts the hosted report address (`you+dmarc@in.bytesend.cloud`) as well as the one on your receiving domain, instead of saying the address wasn't added - The DMARC report panel no longer runs off the side of the screen on mobile. Each source is now a card with a clear pass or fail result +- Every email now includes a plain-text version. Emails sent through the API or SMTP with only HTML went out without one, which spam filters count against them. The text version is made from the HTML, keeping tables readable and leaving out images --- diff --git a/apps/web/src/server/service/email-queue-service.ts b/apps/web/src/server/service/email-queue-service.ts index 861434b..008d633 100644 --- a/apps/web/src/server/service/email-queue-service.ts +++ b/apps/web/src/server/service/email-queue-service.ts @@ -409,8 +409,8 @@ async function executeEmail(job: QueueEmailJob) { const text = email.text ? email.text - : email.campaignId && email.html - ? htmlToText(email.html) + : email.html + ? htmlToText(email.html, { selectors: [{ selector: "img", format: "skip" }, { selector: "table", format: "dataTable" }] }) : undefined; let inReplyToMessageId: string | undefined = undefined;