- Shipped
- September 11, 2026 at 8:52 PM UTC
- Author
- Kamo
- Commit
- 28660b2
A visitor on the marketing site can send the seat-fee article to up to three people. POST /api/internal/article-share (X-Internal-Auth, like every other /api/internal endpoint) sends each of them one email as the top-level organization, from "<sender> via KamoCRM" with Reply-To the sender. Reuses what exists instead of adding a second copy of it: - Opt-outs live in email_suppressions, keyed to the platform org's id, so an opt-out here never touches a hosted org's list and an org's list never blocks this. The link is a signed token (orgId|email, HMAC) that the existing UnsubscribeController and page now accept alongside campaign tokens, with the same RFC 8058 List-Unsubscribe headers campaigns send. - Delivery goes through **************** which gains DeliveryOptions (display name and extra headers) so From, the SPF decision and the relay fallback stay decided in one place. A caller-built letter has no template row, so the usage counter is skipped for it. Limits, counted from a hashed ledger **************** created on startup) so every pod agrees: three people per request, preset notes only, 10 a day per sender and per visitor address, 500 a day overall, one email per address every 90 days, never to a suppressed address. Also sets bulk-email.unsubscribe-base-url in the prod configmap. The code default is blank, which sends campaign mail without its unsubscribe link.