Notifications

Create a Notification Email Template

Email notifications look unprofessional when they're just plain text, and recreating the same HTML formatting across dozens of notifications wastes time. This guide shows you how to build reusable email templates that give your notifications consistent branding and structure.

Why custom email templates matter

ServiceNow's default notification emails are functional but ugly — plain text with basic record information dumped in a list. Your users see these emails in their inbox next to polished marketing emails and SaaS notifications, and the contrast isn't flattering. Platform admins spend hours copying HTML between individual notification records, and any branding changes mean updating dozens of places. Worse, business stakeholders who care about user experience start questioning your team's attention to detail based on email appearance.

How email templates work in ServiceNow

ServiceNow has two related but different concepts: notification layouts and notification templates. Layouts are HTML wrappers that go around notification body content — think of them as the outer shell with headers, footers, and CSS styling. Notification templates are complete email formats you can select when creating individual notifications. Most teams start with layouts because they're reusable across many notifications. You build the layout once with your branding and placeholder areas, then individual notifications just specify their content and ServiceNow wraps it in your layout automatically.

Making templates production-ready

Basic templates work for internal IT notifications, but production implementations need responsive design for mobile, fallback text for blocked images, and robust variable handling for missing data. Smart teams create a small library of layouts — one for alerts, one for approvals, one for status updates — rather than trying to build a single template that handles everything. The real sophistication comes from using conditional logic in your templates to show different content based on record state and building proper plain-text alternatives for email clients that strip HTML.

Before you start

  • notification_admin role or admin role
  • SMTP configured and tested in outbound email settings
Sourdough
Chrome Extension

Sourdough: ServiceNow Monitoring and Analytics

A Chrome extension for ServiceNow Admins and Developers with essential tools, analytics, graphs and monitoring features.

Instance HealthGraphs & ChartsAPI HealthDeveloper ToolsQuick SearchInstance Switcher
Add to Chrome

Free to install. Pro $5/month after a 14-day no-card trial.
Pro requires the ServiceNow admin role. Upgrade inside the extension.

Overview
Tasks
CMDB
API
Metrics
Monitor
Internals
Instance:sourdoughdev·Version:Yokohama
Instance StateONLINE
System StatusFully Operational
Session Timeout90 minutes
Logged-In Sessions2 (20 active)
Build Nameyokohama-12-18-2024_p1
IP Address10.159.128.43
Instance HealthHealth Score: 90%
🔥 5dSourdough (Chrome Plugin)Dark Mode

Step by step

1

Navigate to Email Layouts

Go to System Notification > Email > Layouts. This is where you build the reusable HTML wrapper that goes around notification content. Don't confuse this with the Notification Templates module, which creates complete notification records.

TIP

Email Layouts is a different table than Notification Templates — layouts wrap content, templates are complete notifications.

2

Create the layout record

Click New and fill in the Name field with something descriptive like 'IT Service Alerts' or 'Approval Requests'. Set Type to HTML — the Plain Text option is for fallback content only. Leave Active checked so notifications can use this layout immediately.

3

Build the HTML structure

In the HTML field, write your email template HTML. Use ${message} where you want the notification body content to appear — ServiceNow replaces this with the actual notification text. Include ${mail_to} in a hidden div for tracking. Add your CSS inline or in style tags since many email clients strip external stylesheets.

TIP

Test your HTML in multiple email clients — Outlook handles CSS differently than Gmail.

4

Add dynamic content with variables

Insert record data using ${table.field} syntax, like ${incident.number} or ${sc_request.requested_by.name}. For the current record, ServiceNow automatically provides the main table context. For related records, use dot notation to traverse references. Wrap variables in conditional checks like ${if incident.priority == '1'} for dynamic content and save the layout.

5

Apply layout to notifications

Open any notification record and scroll to the Email Layout field. Select your new layout from the dropdown. The notification's Body field content will now be inserted where you placed ${message} in your layout HTML. Update and test the notification to see your template in action.

6

Test with actual data

Trigger the notification or use the 'Send Test Email' option to verify your template renders correctly with real record data. Check that variables populate properly and HTML displays as expected across different email clients. Fix any rendering issues before rolling out to other notifications.

Best practices

  • Build separate layouts for different notification types (alerts, approvals, informational) rather than one generic template — specific layouts are more effective than trying to handle every use case.

  • Always include ${mail_to} somewhere in your template HTML even if hidden — ServiceNow needs this for proper email tracking and threading.

  • Use inline CSS for critical styling since many email clients strip style tags — only use style tags for non-essential formatting.

  • Test your variables with empty or null values by checking records that don't have data in referenced fields — missing data breaks template rendering.

  • Don't reference fields from different table contexts without proper null checking — ${incident.caller_id.department} fails if caller_id is empty.

Test Your Knowledge

Quick 3-question quiz — see how your ServiceNow skills stack up.

Question 1 of 3Performance

A list view on a table with millions of records is slow. Best fix?

Select an answer to continue