Email Botseon sends you

Member·3 minutes to read

Every mail Botseon sends is transactional: it tells you something about your account, your subscription or your usage, and none of it needs your consent to send. Botseon sends no marketing mail in this build, so nothing here carries an unsubscribe link (F-MAIL-4).

What sends today

Three of the catalogue's messages are wired up and render with real, fixed wording — plain text only, with no HTML layout yet:

export const BILLING_MAIL_TEMPLATES = [
  'billing.payment_failed',
  'billing.payment_required',
  'billing.payment_received',
] as const;
MessageWhen it sendsSubject
Payment failedYour card was declined or could not be charged.Your payment did not go through
Payment requiredYour account is paused until a payment succeeds.Your account is paused until payment succeeds
Payment receivedA payment succeeded and your account is active again.Your payment succeeded

Each names the page to visit — Usage & Billing in the app — rather than a link, because this build has no public URL that is true on every deployment for a mail to point at (packages/billing/src/mail-templates.ts:35-38).

How a send works

No template is ever sent from inside a web request or a payment provider's webhook handler. A send is a mail_send row the worker claims separately, so a slow mail provider never holds a webhook open, and a failure retries with a growing backoff instead of being lost (packages/billing/src/jobs/mail-send.ts:9-18,57-67). Each send carries an idempotency key of the template, your user id and the triggering event — the invoice id, for the three billing messages above — so a redelivered webhook or a retried job sends the same mail at most once (packages/billing/src/jobs/mail-send.ts:20-26,94-100).

The rest of the catalogue

The mail system declares fourteen further message kinds — the sign-in code, the welcome mail, the trial ending, the plan-cancelled and usage-allowance mails, the account and organisation deletion confirmations, and more — as named, typed triggers ready to render (packages/core/src/mail-catalogue.ts:13-31). Each has a defined context (which facts it may state) but no filled-in wording yet: this build's copy catalogue for them is present with every subject and body left empty (packages/mail/src/strings.ts:82-124). None of them sends mail today.

Turning a message off

Nothing here is optional mail: every message reports something about your own account or subscription, so none of them carries a preferences link in this build. If a message ever concerns you, the page it names — Usage & Billing, or your account settings — is where the underlying setting lives, not the mail itself.

See also

Last verified against build c0f77aa.