SaaS email template

Email verification template — confirm addresses without friction

Email verification should be fast and clear. Fire user.email_verification_requested, include the verification link from your backend and let else.events handle the branded, responsive email.

Common mistakes with email verification

Verification email arrives too slowly

A verification email that takes 30–60 seconds to arrive frustrates users who are waiting on the signup confirmation screen.

Link expires before the user clicks it

Too-short verification windows (under 24 hours) cause support requests from users who took a break before clicking.

No fallback for link-blind email clients

Some email clients and corporate filters block links or strip them. A plain-text URL fallback ensures the user can always verify.

Hardcoded verification URL in the template

The verification token must be unique per request. Include the full URL in the event payload — not constructed in the template.

Instant delivery, payload-generated link, clear CTA

Verification URL from payload — generated in your backend

Your backend creates the token and the full URL. It goes into the event payload. The template renders it as a button and plain-text fallback.

Instant delivery from the event

No contact sync delay. The verification email fires the moment your backend emits user.email_verification_requested.

Expiry shown in the email

Show how long the link is valid. Reduces support requests and sets clear expectations.

Managed outside your codebase

Update verification email copy, add a locale, change the CTA text — without a deployment.

Template variables for the email verification email

  • {{ user.name }} Recipient name for the greeting
  • {{ user.email }} The email address being verified
  • {{ data.verification_url }} Unique verification link generated by your backend
  • {{ data.expires_at }} Link expiry time — shown in the email
  • {{ data.app_name }} App name for sender context

Frequently asked questions

What subject lines work for email verification?
"Verify your [App] email address", "Confirm your email for [App]", "You're almost in — verify your email". Direct, action-oriented.
Should verification links expire?
Yes — typically 24–72 hours. Show the expiry in the email. Your backend controls the token lifetime; else.events renders the expiry time from the payload.
What is the difference between email verification and double opt-in?
Email verification confirms that the address belongs to the user (used for signup). Double opt-in is a marketing concept — confirming that the user wants to receive marketing emails. They are separate flows with different legal and UX implications.
What if the user did not receive the verification email?
Provide a "Resend verification email" option in your app. This fires a new user.email_verification_requested event with a fresh token. else.events sends the new email.

Email verification that arrives instantly and works in every client

Token from your backend, instant delivery from the event, expiry shown clearly.

  • Instant delivery from the signup flow
  • Verification URL from event payload
  • Expiry time rendered from payload data