Dynamic Email Template Placeholders in Horilla HRMS

Email communication plays a crucial role in every HR workflow, whether it’s managing leave approvals, onboarding candidates, sharing recruitment updates, or notifying employees about company policies. With Horilla HRMS, email handling is efficient and consistent through the Mail Template Editor, Preview Feature, and Dynamic Placeholders.
This blog focuses on how dynamic placeholders enhance your email templates and how they fit within Horilla HRMS’s overall mail template system.
What Are Dynamic Placeholders?
Dynamic placeholders are smart fields that automatically pull real-time data from employee records, candidate records, or other system entities and inject them into email templates.
For instance:
{{ instance.get_full_name }}
will be replaced with the actual name of the recipient, whether that’s an employee or a candidate.
This makes each message personal without requiring manual editing for every recipient.
Example:
Instead of writing:
Dear Andre Hays,
your post has been changed to Snr HR.
Thanks and Regards
Adam Luis | Horilla
You can use:
Dear {{ instance.get_full_name }},
Your post has been changed to {{instance.get_job_position}}.
Thanks and Regards
{{ self.get_full_name }} | {{self.get_company}}


How These Placeholders Integrate with Horilla’s Template Editor
As described in our overview of the Mail Template Editor and Preview Feature mentioned in the link, Horilla HRMS provides a robust email editor where templates can be built and customized using these placeholders. HR teams can format their emails, insert dynamic fields, and save them for repeated use. The preview option then shows exactly how the email will appear with sample data before it’s sent, helping to catch errors early.
Placeholder Reference Table
Here is a list of commonly used placeholders in Horilla HRMS, categorized by context (sender (Always employee/triggered person), recipient (Employee or Candidate)):
Field | Placeholder | Model |
Full Name | {{ instance.get_full_name }} | Both |
First Name | {{ instance.employee_first_name }} | Employee |
Last Name | {{ instance.employee_last_name }} | Employee |
{{ instance.get_email }} | Both | |
Phone | {{ instance.phone }} | Both |
Date of Birth | {{ instance.dob }} | Both |
Gender | {{ instance.gender }} | Both |
Marital Status | {{ instance.marital_status }} | Employee |
Nationality | {{ instance.country}} | Both |
Address | {{ instance.address }} | Both |
Emergency Contact Name | {{ instance.emergency_contact_name }} | Employee |
Emergency Contact Relation | {{ instance.emergency_contact_relation }} | Employee |
Emergency Contact Phone | {{ instance.emergency_contact_phone }} | Employee |
Department | {{ instance.get_department }} | Employee |
Deparment | {{instance.get_job_position.department_id.department}} | Both |
Job Position | {{ instance.get_job_position}} | Both |
Employee ID | {{ instance.badge_id}} | Employee |
Joining Date | {{ instance.joining_date }} | Candidate |
Joining Date | {{instance.employee_work_info.date_joining}} | Employee |
Probation End Date | {{ instance.probation_end}} | Candidate |
Contract End Date | {{ instance.employee_work_info.contract_end_date }} | Employee |
Work Location | {{ instance.employee_work_info.location}} | Employee |
Work Email | {{ instance.employee_work_info.email }} | Employee |
Work Phone | {{ instance.employee_work_info.mobile}} | Employee |
Employment Type | {{ instance.get_employee_type }} | Employee |
Shift | {{ instance.get_shift}} | Employee |
Bank Name | {{ instance.employee_bank_details.bank_name }} | Employee |
Bank Account Number | {{ instance.employee_bank_details.bank_account_number }} | Employee |
Qualification | {{ instance.qualification }} | Employee |
Stage | {{ instance.stage_id.stage }} | Candidate |
Recruitment | {{ instance.recruitment_id.title }} | Candidate |
Company | {{ instance.get_company }} | Both |
Hired | {{ instance.hired }} | Candidate |
Offer Letter Status | {{ instance.offer_letter_status }} | Candidate |
Why Use Dynamic Placeholders?
Here’s what makes this feature so impactful:
- Efficiency: Save time by eliminating repetitive manual entry.
- Accuracy: Reduce the chance of incorrect or outdated information.
- Consistency: Maintain standard formatting and structure across communications.
- Scalability: Send hundreds of personalized emails with one template.
Common Issues and How to Resolve Them
- Missing Data in Preview
- Cause: Placeholder values are blank or missing in the database.
- Solution: Ensure employee or candidate records contain all required fields.
2. Formatting Discrepancies
- Cause: Mismatched styles, HTML errors, or extra spaces.
- Solution: Use the preview tab to verify the layout before sending.
Conclusion
Dynamic placeholders, combined with Horilla’s Mail Template Editor and Preview Feature, provide HR teams with a professional, reliable, and scalable way to handle communication. Whether it’s for recruitment, onboarding, leave approvals, or announcements, dynamic email templates ensure that every message is timely, consistent, and personalized.
As Horilla continues to evolve, more placeholders and dynamic fields will be added to support broader HR operations. This feature is designed not only for experienced HR teams but also for users with limited technical experience, making automated email personalization easier than ever.