Email Templates
[admin] [email-templates] [i18n] [einstellungen]
licensio sends automatic emails to customers on behalf of the provider: activation, welcome, cancellation, and more. Each of these text building blocks is a template that you can customize. Without customization, the multilingual default applies (German or English, depending on the provider language).
Who it's for
Provider admins who want to control the tone of their customer communication.
Where do I find the templates?
Settings → Email Templates (path: /settings/emails)
In the editor you select the template slot at the top, edit the subject and body, and can pull available variables from a list on the right.
The 10 template slots
Each slot is triggered by a clearly defined event:
activation: the customer was manually activated by the provider. Sent from the "Activate" admin action.welcome: self-service registration via the widget or/join. Confirms account creation, points out the required activation.payment_reminder: a recurring payment failed. Prompt to check the payment method (contains{{portal_link}}).payment_request: an invoice has been issued for the customer's access ("Invoice issued"). Asks them to pay within 14 days via a secure link (card or SEPA direct debit); access is activated automatically once paid. Contains{{payment_link}}.cancellation: the customer has cancelled. Confirms the cancellation date.cancellation_withdraw: the cancellation was withdrawn before it took effect.rejection: the provider rejects a registration.email_change_old: the customer changes the login email. Notifies the old address as a security note.email_change_new: the customer changes the login email. Sends a setup link to the new address.interval_change: the billing interval was changed (e.g. monthly to yearly).
Available variables
Variables are written in the template as {{variable_name}} and replaced on send. Today's variable names are historically partly mixed-language (kunde_firma, kundennummer). A refactor migration to neutral English names (customer_name, customer_number) is in the backlog.
Available in all slots:
{{tenant_name}}: name of your company{{kunde_firma}}: company name (or last name) of the customer{{kundennummer}}: automatically generated customer number (e.g. PT-2026-0042){{support_email}}: support address of your provider
Slot-specific:
{{cancellation_date}}: only incancellation{{portal_link}}: only inpayment_reminder{{payment_link}}: only inpayment_request(secure hosted-invoice link, 14-day window){{old_email}}/{{new_email}}: only inemail_change_old{{reset_url}}: only inemail_change_new{{new_interval}}: only ininterval_change
Multilingual support
The defaults exist in German (de) and English (en). Which language a customer mail goes out in is resolved by resolveCustomerLanguage: the customer's own portal language (customers.preferred_language) wins; without a stored choice it falls back to the provider's portal language (tenants.settings.default_locale, configurable under Advanced Settings → Language & Region). If that is not set either, the choice is country-aware: a provider in DE/AT gets German, any other country gets English. So Plant Technology (country DE, no explicit default_locale) stays German, while a non-DE provider defaults to English.
If you store your own template, your text is used in every language. The templates are currently not maintainable per language: multi-locale templates arrive with Phase 5 (Multi-Locale Foundation for FR/ES/IT).
Override rules
- Custom template completely missing: the default language from
default_localeapplies. - Custom subject set, body empty: the default body is used, your subject wins (or vice versa). Both fields are merged independently.
- Variables are replaced after the merge, so you can leave a default body and customize only your subject without having to check variable consistency.
Test send
The editor has a "Send test" button that sends the currently edited template to your login address, with placeholder values for all variables.
When do changes take effect?
Immediately. The next email that goes out for the respective slot after saving uses your template. Already sent emails are not affected.
Which send routes use the templates
Transactional customer mails are rendered from this template system (instead of hardcoded HTML bodies), among them:
- Admin: customer activation (
activate) and the B2B invoice mail (payment_request, incl.resend-payment-link), provider cancellation (cancel), email change (old + new = 2 sends), registration rejection (reject), the welcome/invite mail. - Portal: self-service cancellation (
cancel-subscription), cancellation withdrawal (cancel-subscription/withdraw), interval change (change-interval).
A few routes (notably the Stripe webhook mails) still use the older pattern and are migrated in a separate sprint.
Keeping variables clean
If you remove variables (e.g. delete {{kundennummer}} from the welcome template), the variable is simply not replaced: the email then contains an empty spot, not an error. If you insert a variable that is not defined for that slot (e.g. {{cancellation_date}} in the welcome slot), it is also replaced with an empty value.
Related
- Multilingual support (i18n) : provider locale setting, locale-aware date and number formats
- Email notifications : when you as a provider admin receive notices (different function)
- Settings overview