From 9b06e2df3018a7a01fc176d8dcb804fa555e76aa Mon Sep 17 00:00:00 2001 From: louispaulb Date: Thu, 21 May 2026 16:42:18 -0400 Subject: [PATCH] fix(docs/campaigns): support@targointernet.com is the validated sender, not support@targo.ca MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previous commit (380f3bc) incorrectly claimed Mailjet verified targo.ca at the domain level. It doesn't — Mailjet validates senders ONE BY ONE, even when SPF/DKIM/DMARC are correctly published at the domain. The mistake: SMTP returned `250 OK` on a send-test from support@targo.ca, but the message was silently dropped on Mailjet's side because that specific mailbox hadn't been approved. Validated senders on this Mailjet account: ✓ noreply@targo.ca — hub transactional (invoices etc.) ✓ support@targointernet.com — gift campaigns `support@targo.ca` is NOT validated, despite being on a domain whose sibling (`noreply@targo.ca`) is. Updated: - README default --from value - The "sender" section now explains per-sender validation (not domain-level) and the SMTP-250-but-not-delivered gotcha - Listed both validated senders explicitly with usage intent The script itself (send_gift_campaign.js) was already sender-agnostic — only README guidance changed. New senders are added in Mailjet console → Sender Domain Verification → Add sender, with the verification link mailed to the new address. --- scripts/campaigns/README.md | 45 ++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/scripts/campaigns/README.md b/scripts/campaigns/README.md index dacf781..b68cbb3 100644 --- a/scripts/campaigns/README.md +++ b/scripts/campaigns/README.md @@ -86,24 +86,39 @@ The `--sandbox` flag does TWO things: ### `--from` sender -The Mailjet account has `targo.ca` verified at the domain level (SPF + -DKIM + DMARC), so any `*@targo.ca` sender works out of the box. The -default we use for gift campaigns is: +Mailjet validates senders **individually**, not at the domain level — +each mailbox (`noreply@`, `support@`, etc.) must be approved separately +in the Mailjet console even when SPF/DKIM/DMARC are published at the +domain level. The two known-validated senders on this account are: + +| Sender | Used by | Status | +|---|---|---| +| `noreply@targo.ca` | hub transactional (invoices, magic links) | ✓ validated | +| `support@targointernet.com` | gift campaigns | ✓ validated | + +The default for gift campaigns: ``` ---from "Gigafibre Support " +--from "Gigafibre Support " ``` -Reasoning: it's a human-monitored mailbox (unlike `noreply@`), so if a -recipient hits reply with a question about their gift, someone sees it -and can help. The hub's transactional emails (invoices, magic links) -still go from `noreply@targo.ca` — campaigns are different in that -they invite a reply. +Reasoning for `support@` over `noreply@`: campaigns INVITE a reply +(questions about the gift, "I didn't get mine", "the link doesn't +work"). `noreply@` is for transactional system mail where there's +nothing useful for a human to reply to. Different intent → different +sender. -If you ever need a `@gigafibre.ca` sender, that's a 30-min DNS + Mailjet -setup (add the domain in Mailjet → publish SPF/DKIM CNAMEs in -Cloudflare) — not done yet because all customer-facing email currently -flows through `targo.ca`. +**Common gotcha**: SMTP returns `250 OK` even when Mailjet later refuses +to deliver because the sender isn't validated. So the script will say +"sent" but the recipient never sees the message. Always verify a single +test arrives in inbox before doing a bulk send with a new sender. We +hit this with `support@targo.ca` (caught after the fact, fixed by +switching to `support@targointernet.com`). + +If you need a new sender (e.g. `recompenses@gigafibre.ca`), add it in +the Mailjet console → Sender Domain Verification → Add a sender, then +click the verification link mailed to that address. Per-sender approval +takes minutes once you control the inbox. ## Stage 2 — send the personalized French emails @@ -117,7 +132,7 @@ node send_gift_campaign.js \ --subject "🎁 Un cadeau pour vous, de la part de Gigafibre" \ --amount "50 $" \ --expiry "31 décembre 2026" \ - --from "Gigafibre Support " \ + --from "Gigafibre Support " \ --dry-run ``` @@ -139,7 +154,7 @@ node send_gift_campaign.js \ --subject "🎁 Un cadeau pour vous, de la part de Gigafibre" \ --amount "50 $" \ --expiry "31 décembre 2026" \ - --from "Gigafibre Support " \ + --from "Gigafibre Support " \ --smtp-host in-v3.mailjet.com --smtp-port 587 \ --smtp-user "$SMTP_USER" --smtp-pass "$SMTP_PASS" \ --throttle-ms 600