/** * Renders the email that greets a new account. `sendWelcomeEmail` * (`user-service.ts`) sends it after sign-up, in the instance's style and * language. It opens with the instance's `GERBEUR_WELCOME_EMAIL_BODY`, or the * built-in body, then says the digests are on, since they are by default, and * where to turn them off. * * @module */ import { FRONTEND_URL, OG_SITE_NAME, WELCOME_EMAIL_BODY } from "../config.ts"; import { i18n } from "./i18n.ts"; import { EmailKit, escMd, lookOf, mdLink, type RenderedEmail, } from "./layout.ts"; /** * Returns the welcome email of `username`. The instance's body has * `{{username}}` and `{{site_name}}` filled in; raw HTML in it passes * through, since it comes from whoever runs the instance, never from a user. */ export function renderWelcomeEmail(username: string): RenderedEmail { // A username may hold a `_`, which Markdown would read as emphasis. const body = WELCOME_EMAIL_BODY ? WELCOME_EMAIL_BODY .replaceAll("{{username}}", escMd(username)) .replaceAll("{{site_name}}", escMd(OG_SITE_NAME)) : i18n._({ id: "email.welcome.body", message: "# Welcome to {site}!\n\nHi **{username}**,\n\nYour account has been created successfully. Welcome aboard!", values: { site: escMd(OG_SITE_NAME), username: escMd(username) }, }); const markdown = [ body, mdLink( i18n._({ id: "email.welcome.button", message: "Open {site}", values: { site: OG_SITE_NAME }, }), FRONTEND_URL, ), `*${ escMd(i18n._({ id: "email.welcome.digests", message: "Once a week you'll get a digest of what happened here, and once a month a recap of the most upvoted dumps. You can turn either off in your settings.", })) }*`, "---", escMd(i18n._({ id: "email.welcome.reason", message: "You're getting this email because an account was created on {site} with this address.", values: { site: OG_SITE_NAME }, })), ].join("\n\n"); return new EmailKit(lookOf()).render({ subject: i18n._({ id: "email.welcome.subject", message: "Welcome to {site}", values: { site: OG_SITE_NAME }, }), preheader: i18n._({ id: "email.welcome.preheader", message: "Your account is ready.", }), markdown, }); }