Customizing email templates
Email templates define the content and layout of the emails that are sent using The Email Button and the Email Screen, as Email Notification Schemes or as Workflow Post Function, all of which you can configure with your custom templates. To manage templates, do the following:
1. Go to Templates under the EMAIL CONTENT menu item of the Outgoing Mails configuration tab.
2. Click on Add to create a new template or click on the three dots and choose Edit to modify an already existing template.

Templates may contain static and dynamic content related to issues, projects and users, such as:
- Issue fields
- Custom fields
- Comments
- Worklog details
It is possible to build templates from scratch, and there are predefined template themes that help to get started with custom templates.
Themes help you to build your own templates for various goals. Click the Add button to add new templates from themes.

Theme | Description |
All Details | This theme is used for adding templates that render all issue fields, including custom fields. |
Issue Commented | This theme is useful for notifications on events that contain comments, e.g. when an issue is commented, or a transition is executed. |
Issue Updated | This theme focuses on highlighting changes made to an issue. |
Work Logged | This theme gathers worklog information. It is useful for notifications on worklog-related events. |
Empty | An empty theme for starting a template from scratch. |
Email Templates may be built using using Apache Velocity Markup. Aspects to consider:
- Basic Settings
- HTML Template
- Text Template

Category: Emails are grouped into categories. Enter any text, and a category will be automatically created if doesn't already exist. There are special categories for special uses, for instance the responses. By default, templates in this category can be selected as a canned response on the Email Screen.
Subject templates are part of an Email template. They are used for generating the final subject of the emails sent using this template. The Subject template can contain static text and dynamic content, such as issue fields and custom fields.

The $!mailSubject variable is replaced by the subject you enter in the Email Notification Schemes or Workflow Post Function.
When you send a manual email, the Subject Template is used for generating the subject in the The Email Button and the Email Screen. The subject you enter in the email screen is not modified further by the email templates when the email is sent.
HTML Template is used when an HTML email is sent using this email template. The HTML body may be combined with HTML and Apache Velocity Markup to give templates a customizable look and layout.
The HTML template may be developed using a WYSIWYG editor. With this editor everyone can develop templates without HTML coding experience.

The Rich Text editor allows users to apply formatting, add tables, images, links, preview the template and edit content in full screen.
HTML can include issue fields and custom fields, and complex structures such as:
- Comments
- Issue link information
- Change history
To edit HTML directly, open the HTML Editor and make changes to the source code of the template.

Email This Issue can embed an image targeted by a URL on an
<img>
tag level. This way you can send out attachments of the issue, and the recipient does not need to connect and create a Jira user account to see the attachment.To allow this feature, add the
data-embed="true"
attribute to the <img>
element. Example:
<img src="https://www.meta-inf.hu/download/attachments/35749899/icon_product_jeti.png?version=1&modificationDate=1524212907169&api=v2" data-embed="true">
The Text Template is used for sending pure text emails with this email template.

The Text Body part can also contain issue fields, custom fields and the same set of complex structures as the HTML Body.
Field Picker is a dropdown list of all issue fields and custom fields. When a field is selected, a tiny popup dialog opens with the template code fragment needed to render the value of the field in the email. Click the button in the dialog to add the code to the cursor position.
The Field Picker is available for Subject Template, HTML and Text Body templates.

The following is a list of variables that are available in the email templates.
Variable | Definition | Example | Type |
currentUser | The current user sending the email | $!currentUser.displayName Renders the full name of the current user. | |
mailSubject | The email subject entered manually in the subject field on the manual email screen, notifications or workflow post functions.
In case of a Send auto reply action this will represent the subject of the original email. | | String |
mailBody | The email body entered manually in the Body field in the manual email screen, notifications or workflow post functions.
Add this variable to all templates to render an email body entered by users.
In case of a Send auto reply action this will represent the body of the original email. | | String |
issue | The Issue object with all available fields. The email is being sent in relation to this issue. | $!issue.summary Renders the issue summary in the template. | |
baseUrl | The base URL of the Jira Cloud site. Useful to add links to Jira screens or operations. | It is a simple String value you can use in building links. ![]() | String |
issueEvent | The issue event if the email is being sent as an event notification. | | |
comment | The comment the user enters during the operation. E.g. when editing the issue or executing a workflow transition. | #renderComment() Renders the comment. | |
changeLog | The changelog holding information about all fields changed during the operation. Old and new values are available. | #renderChanges() Renders the changelog in a readable structure. | |
worklog | The worklog object holding details of the worklog entered or edited. | #renderWorklog() Renders the worklog details. | |
emailCommand | The email definition object holding all recipients, the subject and body, the issue event and the comment details. | $!emailCommand.attachment sReturns the list of attachments being added to the email. | |
sentDate | A formatted date representing when the original email was processed by Email This Issue. Available only in Reply/Reply all/Forward for an email. | $!sentDate Prints the when the email was processed by Email This Issue. | String |
stringUtils | String helper methods | $!stringUtils.isBlank($!issue.summary) returns true if the issue summary is empty or null. $!stringUtils.join($!issue.labels, ", ") prints the labels separated by comma. | |
templateSupport | The support object useful in templates. A constantly enhanced object, that will receive more and more methods. | |
The following is the list of macros that are available in the email templates.
According to Atlassian's announcement, the 'Epic Link' custom field will be deprecated as of 31th May 2022.
As a consequence, exisiting macros utilizing the 'Epic Link' value (usually in a form of
#renderCustomField($!issue 'customfield_10014'
- however, the custom field ID can vary per site) won't work after this deadline.Please, review and consider replacing your old macros with any of our new offerings (
#renderParent
or #renderParentEpic
).Due to some known limitations in hierarchy level retrieval for custom issue types introduced in Advanced Roadmaps (verified by Atlassian in this community announcement), the
#renderParent
macro currently does not work as expected for higher hierarhy levels than that of Epic (1).
E.g. #renderParent($!issue, 2)
will not render a parent having 'Initiative' issue type (hierarchy level 2).Macro signature | Parameters | Description | Example |
#renderDateTime($dateTimeValue $pattern $timezone) |
| Formats a dateTime field based on the pattern and the timezone. | #renderDateTime($!issue.created "dd MMM yyyy hh:mm a" "Australia/West") |
#renderIssueComments($order $num $restrictions) |
| A generic, multi-purpose comment rendering macro. | #renderIssueComments("desc" "all" "") prints all comments starting with the latest one. #renderIssueComments("asc" "all" "") prints all comments starting with the first one. #renderIssueComments("desc" "1" "") prints the latest comment.#renderIssueComments("desc" "all" "none") prints all comments which are not restricted. #renderIssueComments("desc" "all" "public") prints all public comments starting with the latest one. |
#renderLinkToPortal($linkText) |
| Renders a link to the portal with a custom text. | #renderLinkToPortal("View Customer Portal") |
#renderLinkToPortalRequest($linkText) |
| Renders a link to the request with a custom text. | #renderLinkToPortalRequest("Open request") |
#renderAllComments($comments) |
| Renders all comments (both public and internal). | #renderAllComments($!issue.comments) |
#renderChanges() | | Renders the changelog in a readable structure. | #renderChanges() |
#renderComments($comments) |
| Renders the public comments. | #renderComments($!issue.comments) |
#renderCommentsInReverseOrder($comments) |
| Renders the public comments in reverse order. | #renderCommentsInReverseOrder($!issue.comments) |
#renderCustomField($issue $customFieldKey) |
| Renders the value of the custom field as displayed in Jira. | #renderCustomField($!issue, 'customfield_10603') |
#renderLastComment($issue) |
| Renders the last comment of the issue. | #renderLastComment($!issue) |
#renderParent($issue, hierarchyLevel) |
| Renders the parent issue of the issue passed as parameter, only if the hierarchy level of the parent issue is higher than or equal to the specified hierarchy level.
Hierarchy levels of some known issue types:
|
|
#renderParentEpic($issue) | $issue : The issue, whose parent issue shall be rendered | Renders the parent issue of the issue passed as parameter, only if the parent issue is an Epic. In this regard, it can be considered as a replacement for the former 'Epic Link' custom field renderer. | #renderParentEpic($!issue) |
It is possible to add certain text to a URL link in a template. Open the template in its raw HTML editor form and use the following code:
#set($url = $issue.getCustomFieldValue('customfield_12345').value) <a href="$url/go" target="_blank">$url/go</a>
Make sure to use the correct
customfield
ID as shown in the following example:
Templates offer a handful of operations under the three dots.
Template operation | Definition |
Test | Opens the Test Template dialog. |
Copy | Opens the template editor screen with a copy of the current template. |
Edit | Opens the template editor. |
Delete | Deletes the template from the system |
While developing a template it is necessary to validate the look, layout and content the template renders. For the HTML Body you can use the rich text editor's Preview function to check the layout and content, but the best way to validate whether a template is correct is using the Test operation. It allows you to enter an issue key and send yourself an HTML or Text formatted email.

Once the email was sent, verify in your email app whether the content and layout was according your expectations.