Transactional

Password Reset Email

A secure and clear password reset email template. Guides users through resetting their password safely.

responsive
dark-mode
security-focused
VARIABLES

Template Variables

VariableTypeDescriptionExample
{{user_name}}requiredstringThe user's first name or display nameJohn
{{reset_url}}requiredstringThe password reset link (should expire)https://app.example.com/reset?token=abc123
{{expiry_time}}requiredstringHow long the reset link is valid1 hour
{{product_name}}requiredstringYour product or company nameAcme App
{{support_email}}stringSupport email for questionssupport@acme.com
CODE

Template Source

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Reset your password</title>
</head>
<body style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background-color: #f4f4f5;">
  <table width="100%" cellpadding="0" cellspacing="0" style="max-width: 600px; margin: 0 auto; padding: 40px 20px;">
    <tr>
      <td style="background-color: #ffffff; border-radius: 8px; padding: 40px;">
        <h1 style="margin: 0 0 24px; font-size: 24px; color: #09090b;">
          Reset your password
        </h1>
        <p style="margin: 0 0 16px; font-size: 16px; line-height: 1.6; color: #71717a;">
          Hi {{user_name}},
        </p>
        <p style="margin: 0 0 24px; font-size: 16px; line-height: 1.6; color: #71717a;">
          We received a request to reset your password for your {{product_name}} account. Click the button below to choose a new password:
        </p>
        <a href="{{reset_url}}" style="display: inline-block; padding: 14px 28px; background-color: #09090b; color: #ffffff; text-decoration: none; border-radius: 6px; font-weight: 600;">
          Reset Password
        </a>
        <p style="margin: 24px 0 0; font-size: 14px; line-height: 1.6; color: #a1a1aa;">
          This link will expire in {{expiry_time}}. If you didn't request this, you can safely ignore this email.
        </p>
        <hr style="margin: 32px 0; border: none; border-top: 1px solid #e4e4e7;">
        <p style="margin: 0; font-size: 12px; color: #a1a1aa;">
          If the button doesn't work, copy and paste this link into your browser:<br>
          <a href="{{reset_url}}" style="color: #3b82f6; word-break: break-all;">{{reset_url}}</a>
        </p>
      </td>
    </tr>
  </table>
</body>
</html>

Security Best Practices

Token Security

  • Generate cryptographically secure tokens (at least 32 bytes)
  • Store only the hashed token in your database
  • Set a short expiry time (1 hour recommended)
  • Invalidate the token after use

Email Security

  • Never include the user's current password
  • Use HTTPS for all reset links
  • Consider adding the user's IP address or location
  • Log all password reset attempts

Customization Tips

Adding Device Information

Include information about where the request came from:

const html = render(<PasswordResetEmail
  userName={user.name}
  resetUrl={resetUrl}
  expiryTime="1 hour"
  productName="Acme App"
  deviceInfo="Chrome on Windows, New York, USA"
/>);

Multiple Languages

Create localized versions of this template for international users. Store the user's language preference and use the appropriate template.

Use This Template

Sign up for free and start sending beautiful emails today.