Luna HR Docs

Email Templates

Luna HR sends email notifications for important events — leave approvals, expense status changes, training reminders, onboarding invitations, and more. You can customise the subject and body of these emails to match your company's tone of voice.

How it works

Luna HR uses pre-built email templates for each notification type. Each template has:

  • A subject line — what appears in the recipient's inbox
  • A body — the content of the email, with variables that are filled in automatically

Templates are grouped by module: Leave, Expenses, Training, Security Awareness, Performance, Assets, Onboarding, Offboarding, Wellness, Documents, Recruitment, Delegation and Accounts. Accounts holds the Login Invite sent from the Employees page and the onboarding sign-up nudge; switching it off stops both, and sending an invite while it is off is refused with a message saying why.

The Recruitment Notification template only has an on/off switch here. Its wording comes from your recruitment letter templates, so edit it in Recruitment settings.

Variables

Templates support variables that are replaced with real data when the email is sent. Variable names are lower case with underscores. For example:

  • {{employee_name}} — the employee the email is about
  • {{approver_name}} — the person who approved or declined
  • {{company_name}} — your company name (available on every template)
  • {{leave_type}} — the type of leave requested
  • {{start_date}} / {{end_date}} — relevant dates

The available variables depend on the template type — the editor lists the exact set for the template you have open, and that list is the authority.

If you save a template containing a variable that isn't on that list — a typo such as {{employee_first_name}} where the real name is {{employee_name}} — the save is rejected and the message names the offending variable. Spaces inside the braces are fine: {{ employee_name }} works and is saved as {{employee_name}}. Braces around something that can't be a variable name, such as {{employee name}}, are rejected.

Variables that change with the situation

Some templates go out in more than one situation — a reminder before the due date and a chaser after it, the certificate holder's copy and their manager's copy. So that your wording reads right in every case, these templates have variables whose wording changes to match:

  • Review Reminder — {{due_status}} reads "is due in 7 days", "is due today" or "is 7 days overdue".
  • Feedback Request — {{request}} reads "give peer feedback on Alex Carter", or "complete your self-assessment" when someone is assessing themselves. {{request_title}} is the headline for that send: "Feedback requested: Alex Carter", "Reminder: …", "Overdue: …" or "Your self-assessment for …". {{due_status}} works as above. {{reviewer_type}} already includes the word "feedback" ("peer feedback", "upward feedback"), so write "give {{reviewer_type}}", not "give {{reviewer_type}} feedback".
  • Course Due (Security Awareness) — {{course_kind}} reads "course", or "refresher" when someone's pass has run out.
  • Certification Expiry Warning — the line manager gets their own copy. {{employee_name}} is whoever the email is to. {{holder_possessive}} reads "Your", or "Sarah Smith's" on the manager's copy. {{expiry_status}} reads "expires in 30 days", "expires today" or "expired 5 days ago".
  • Delegation Created — {{cover_period}} reads "from 1 May 2026 to 14 May 2026", "from 1 May 2026, with no end date", or "from 1 May 2026, only while James is on leave" for a backup who covers only during leave.

The default wording for these templates already uses them.

What a custom body replaces

Your wording replaces the prose of the email — the heading and paragraphs. The details (dates, amounts, course names, the survey title) and the button are added underneath, whatever you write, so you don't need to list them. The default wording the editor starts you with doesn't list them either.

A subject can be up to 200 characters and a body up to 5,000. Line breaks in a subject are turned into spaces. If you clear the subject or the body and save, that part goes back to Luna's default wording.

Approvers' emails for leave, expense and training requests have a Review request button. It opens Approvals in Luna HR, where the approver can approve or decline the request. The email itself doesn't approve or decline anything. Rewording the email can't remove the button.

Customising templates

  1. Go to Admin > Email Notifications
  2. Browse templates by module (Leave, Expenses, Training, etc.)
  3. Open the ⋯ menu on a template and choose Edit content
  4. Modify the subject and body as needed
  5. Use Preview to check the email, and Send test to me to see it in your inbox
  6. Save your changes

Templates are per-module — you can customise leave emails separately from expense emails.

Preview and test emails

Preview shows the email exactly as it will be sent: your wording, or Luna's default if you haven't changed anything, with the details, the button and the footer. The variables are filled with the example values listed in the editor, and the footer shows your company name.

Send test to me sends that same email, with a "Test email" banner at the top. The confirmation says the test is queued. The email is sent a moment later, and if it can't be delivered it appears under Recent delivery problems.

Reset to default

If you want to undo your changes, each customised template has a Reset to default option that restores the original wording. It only changes the wording: a template you switched off stays off.

Email delivery

Luna HR sends emails via Resend, a transactional email service. Emails are sent in real-time when the triggering event occurs (e.g. a leave request is approved).

Every template listed in the editor corresponds to an event Luna HR actually sends on. If a template is listed, customising it changes a real email.

Employees can control which emails they receive via their Notification preferences.

If the email service is briefly busy or unavailable, Luna retries the send for a few minutes, and never delivers the same email twice.

Recent delivery problems. If an email to one of your employees can't be delivered, it appears in a Recent delivery problems card at the top of Admin > Email Notifications. An email counts as undelivered when the address was refused, or when Luna has retried it and given up. The card shows the last 10 problems from the past 7 days: the subject, the recipient, when it failed and the reason. The card is hidden when there's nothing to show. A refused address usually means the email address on that person's employee record is wrong. If every email is failing, contact support.

Invitation limit. Your company can send up to 500 invitation emails a day: login invites, onboarding invites and resends, and draft-report tests. Bulk sends count each email. If a send would go over, it is refused with a message saying how many are left, and nothing is sent. Everyday notifications — approvals, reminders, reports — do not count towards it.

Test emails from this page and draft-report tests go to the email address you sign in with, not the address on your employee record. Test emails from this page are limited to 10 an hour.