Branding and the app's own email
How an app's email looks, how its sign-in and invitation mail is sent, and what happens when its mail server is unavailable.
Every email an app sends wears the app's branding: the messages your handlers send with
sdk.sendEmail, and the messages the app sends its own users (sign-in links and codes, password
resets, invitations). Nothing of Authoric's (name, mark, colors, "replies are not monitored")
appears in an app's email.
Set the branding
Open the app and go to App settings › Branding. Every field is optional; whatever you leave blank falls back to neutral defaults, never to Authoric's.
| Section | Fields |
|---|---|
| Branding | Display name (the header, the footer, and the sender's display name), Logo, Logo for dark mode, Icon |
| Colors | Primary (buttons and links), accent (a bar across the top of the message), background (the page behind it), each for light and dark mode. Button and header text are chosen for contrast, and a low-contrast choice is flagged. |
| Footer | Company, postal address, support email, website, social links |
| Email defaults | Reply-to, and a footer note ("You receive this because you have an account with Acme.") |
The Preview renders a sample message, in light and dark mode, as you edit. Send a test to sends it to an address you give, through the app's default email connection.
Images come from a public storage
An email loads its images from the internet, so a logo must be publicly readable. Pick an image
from one of the app's public storages, or paste an https URL. A file in a private storage
cannot be shown in an email; if you have no public storage, create one (a storage named
Branding is a good habit) and upload the logo there.
The branding stores which file you picked, not a copy, so replacing that file updates every email sent after it.
The app's own email
When one of the app's users asks for a sign-in link, a sign-in code or a password reset, or is invited to one of the app's organizations, the app sends that email:
- in the app's branding, with nothing of Authoric's look;
- from the app's default email connection, when it has one that works, so it comes from your
domain and is recorded in the app's email log. The link or code is
logged as
•••.
When the app has no sender of its own
A sign-in must never depend on a mail server being up. So if the app has no default connection, or its connection is untested, or its server refuses the message, the platform's own sender delivers it instead, still in the app's branding. Such a message comes from the platform's sending address rather than your domain, and is not in the app's email log.
That fallback is only for the app's own auth email. A handler's sdk.sendEmail never falls back:
an app with no grant gets EMAIL_NOT_GRANTED, and a refused message gets EMAIL_SEND_FAILED.
Read the branding from a handler
sdk.app.branding() returns the branding with every image as a public URL, for a handler that
renders something of its own in the app's look: a PDF invoice, an HTML page. Email sent with
sdk.sendEmail already wears it. It needs sdk:app_read, which every author holds.
const brand = await sdk.app.branding();
// {
// displayName, logoUrl, logoDarkUrl, iconUrl,
// colors: { light: { primary, accent, background }, dark: { primary, accent, background } },
// footer: { company, address, supportEmail, website, social: [{ label, url }] },
// email: { replyTo, footerNote },
// }Every field may be null.