From c0e8e9561fd535ff3691e42ebb69c0ac9668ebd7 Mon Sep 17 00:00:00 2001 From: Farhad Hedayatifard Date: Fri, 6 Nov 2026 11:02:07 +0100 Subject: [PATCH 1/2] Docs: describe the product as it is today, without migration notes Pages should tell a new reader how AhaSend works now; history belongs in the changelog. These pages carried notes for customers of older setups: - domains: "older" and "legacy" domains and the "DNS v3" label; a domain with manual DNS simply uses one DKIM TXT record - Drupal guide: the note on module 1.x and the Mail System module - IP allow lists: "existing keys keep working exactly as before" - AhaML: designs "made by an older editor" - roadmap: the planned DKIM rotation card names manual-DNS domains --- domains.mdx | 8 ++------ guides/drupal.mdx | 4 ---- roadmap.mdx | 4 ++-- security/ip-allow-lists.mdx | 2 +- send-api/ahaml.mdx | 4 ++-- 5 files changed, 7 insertions(+), 15 deletions(-) diff --git a/domains.mdx b/domains.mdx index 57f7636..adc2363 100644 --- a/domains.mdx +++ b/domains.mdx @@ -77,7 +77,7 @@ Before setting up your domain, make sure you have: - **The domain or subdomain** you want to use for sending emails -**Managed DNS vs manual DNS:** New domains in AhaSend use managed DNS (DNS v3) by default. Managed DNS shows two DKIM CNAME records so AhaSend can rotate DKIM keys safely over time. Some older or explicitly manual domains may still use the legacy single-DKIM-TXT setup instead. Your domain details page is always the source of truth for the exact records you need to publish. +**Managed DNS vs manual DNS:** New domains in AhaSend use managed DNS by default. Managed DNS shows two DKIM CNAME records so AhaSend can rotate DKIM keys safely over time. A domain with manual DNS uses a single DKIM TXT record instead. Your domain details page is always the source of truth for the exact records you need to publish. @@ -138,7 +138,7 @@ Before setting up your domain, make sure you have: **Record Type:** Usually `CNAME` for managed DNS, sometimes `TXT` for manual DNS **Purpose:** Prevents email tampering, confirms sender identity, and enables safe DKIM rotation on managed domains - **Managed DNS (DNS v3):** + **Managed DNS:** ```text Name: managed._domainkey.(your domain or subdomain) @@ -161,10 +161,6 @@ Before setting up your domain, make sure you have: Type: TXT Value: [unique DKIM public key] ``` - - - If you are working with a legacy or explicitly manual domain, your dashboard will show a single DKIM TXT record instead of the managed CNAME-based setup. - diff --git a/guides/drupal.mdx b/guides/drupal.mdx index 042e029..35f536e 100644 --- a/guides/drupal.mdx +++ b/guides/drupal.mdx @@ -14,10 +14,6 @@ The [AhaSend module](https://www.drupal.org/project/ahasend) adds an AhaSend tra Composer also installs the required [Symfony Mailer](https://www.drupal.org/project/symfony_mailer) module. The AhaSend module works with Symfony Mailer 1.6 or later and with 2.x, which is called Mailer Plus. This guide notes where the two differ. - - Version 2.x of the module uses API v2. It replaces version 1.x, which used the legacy API v1 and the Mail System module. Version 1.x is no longer supported and has no upgrade path. - - ## Install the Module From your Drupal project root: diff --git a/roadmap.mdx b/roadmap.mdx index d400a5e..57fda45 100644 --- a/roadmap.mdx +++ b/roadmap.mdx @@ -385,8 +385,8 @@ The AhaSend roadmap shows active work, planned improvements and shipped features
-

DKIM rotation for older domains Improvement

-

Add DKIM rotation support when upgrading legacy domains.

+

DKIM rotation for manual-DNS domains Improvement

+

Add DKIM rotation support when a manual-DNS domain moves to managed DNS.

diff --git a/security/ip-allow-lists.mdx b/security/ip-allow-lists.mdx index 714454b..89961c3 100644 --- a/security/ip-allow-lists.mdx +++ b/security/ip-allow-lists.mdx @@ -16,7 +16,7 @@ Available on Free, Pro and Max. See [plans and features](/facts#plans-and-featur ## How it works -Every API key carries an `ip_allow_list`. It is empty by default, and an empty list means no restriction, so existing keys keep working exactly as before. +Every API key carries an `ip_allow_list`. It is empty by default, and an empty list means no restriction. When the list is not empty: diff --git a/send-api/ahaml.mdx b/send-api/ahaml.mdx index 59babd1..73d8e5b 100644 --- a/send-api/ahaml.mdx +++ b/send-api/ahaml.mdx @@ -545,7 +545,7 @@ A read prints the stored design as the email draws it. So some designs come back - A `Color` mark with no color comes back as the paragraph color, `#374151`. A `Highlight` with no color, an empty color and an image with no source draw nothing, and are left out. - A theme setting the stored design lacks comes back at the value the email is drawn with. - A section padding or margin, or a border width or radius, that the editor keeps as one value for all four sides comes back with all four sides at that value. -- A setting an older editor stored that the email does not use, such as a color on a list item, is left out. +- A stored setting that the email does not use, such as a color on a list item, is left out. - A paragraph, heading or footer whose text draws nothing, such as spaces alone, is left out. An empty paragraph, which draws a blank line, stays. When the only text is characters XML cannot hold and one of them draws a line, the block comes back as one line: an empty paragraph, or a heading or footer holding a `
`. - A rule whose result is known before the email is sent, such as one on a name that is not valid, is left out when it always shows its block, and the block is left out with it when it always hides it. A `Repeat` whose list name is not a valid name is left out with its blocks. - A rule whose action is neither show nor hide is left out, as the email always shows its block. A `value` stored with `is_true` or `is_false` is left out, as those operators do not read it. @@ -554,7 +554,7 @@ A read prints the stored design as the email draws it. So some designs come back A block left out as above can take its bottom margin with it where no block next to it draws as large a margin: at the start or the end of the tag that holds it, or after a `Spacer`, a `Columns` or a `Section` with no bottom margin. -A design made by an older editor comes back with every setting it lacks at its default, as the editor fills them when it opens the design. This is the one case where an edit can change the sent email beyond what the edit itself changes: a write stores the filled settings, as the next save in the dashboard would. AhaML sent back unchanged keeps the stored design. +A setting other than a theme setting that the stored design lacks comes back at its default, as the editor fills it when it opens the design. This is the one case where an edit can change the sent email beyond what the edit itself changes: a write stores the filled settings, as the next save in the dashboard would. AhaML sent back unchanged keeps the stored design. A design AhaML cannot show reads with `markup` null and `markup_error` set: From 0bea4157882c3191821ee692c441ac361191cd24 Mon Sep 17 00:00:00 2001 From: Farhad Hedayatifard Date: Fri, 6 Nov 2026 11:20:05 +0100 Subject: [PATCH 2/2] Docs: say which Drupal module version the guide covers The guide installs module 2.x; one line says so, so a site on another version knows the steps are for 2.x. --- guides/drupal.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/drupal.mdx b/guides/drupal.mdx index 35f536e..354ea3f 100644 --- a/guides/drupal.mdx +++ b/guides/drupal.mdx @@ -4,7 +4,7 @@ sidebarTitle: "Drupal" description: "Send Drupal email through AhaSend API v2 with the AhaSend module: add a Symfony Mailer transport, test in sandbox mode and log events from signed webhooks." --- -The [AhaSend module](https://www.drupal.org/project/ahasend) adds an AhaSend transport to Drupal's Symfony Mailer module. Your site's email, such as password resets, account notifications and form submissions, is sent through the AhaSend API v2. The module can also receive signed AhaSend webhooks and show the delivery events of each message in Drupal. +The [AhaSend module](https://www.drupal.org/project/ahasend) adds an AhaSend transport to Drupal's Symfony Mailer module. Your site's email, such as password resets, account notifications and form submissions, is sent through the AhaSend API v2. The module can also receive signed AhaSend webhooks and show the delivery events of each message in Drupal. This guide covers version 2.x of the AhaSend module. ## Prerequisites