SKILL·6E85A7

converting-email-templates

mailtrap
Updated Yesterday
7
1
7
View on GitHub
Metaai

About

This skill converts email templates from providers like SendGrid or Mailgun into Mailtrap-compatible Handlebars syntax. It handles single files, bulk directories, or inline HTML, using both pattern matching and LLM intelligence for edge cases. Use it when migrating templates to Mailtrap to automate syntax conversion.

Quick Install

Claude Code

Recommended
Primary
npx skills add mailtrap/mailtrap-skills -a claude-code
Plugin CommandAlternative
/plugin add https://github.com/mailtrap/mailtrap-skills
Git CloneAlternative
git clone https://github.com/mailtrap/mailtrap-skills.git ~/.claude/skills/converting-email-templates

Copy and paste this command in Claude Code to install this skill

Documentation

Converting email templates

Purpose

Automatically convert email templates from other email service providers into Mailtrap-compatible Handlebars syntax. Handles both deterministic pattern conversions (via a Python script) and complex edge cases (via LLM intelligence).

Related skills: using-email-templates (Handlebars syntax, API template send), sending-emails (stream bases and auth), authorizing-api-requests (tokens, env vars, account_id resolution — needed when creating templates or sending via the Templates API after conversion).

Input

  • Source provider (required): sendgrid, mailgun, mandrill-handlebars, mandrill-mergetags, postmark, brevo, or ses
  • Input: a single template file path, a directory of .html template files, or raw HTML pasted inline
  • Output directory (optional): defaults to a /converted/ subdirectory next to the input

If the user does not specify the source provider, ask before proceeding. If the user provides template HTML inline (pasted in chat), save it to a temporary .html file first.

Workflow

Step 1: Detect mode

Fast mode (default): For providers with deterministic conversion patterns. The Python script handles these reliably.

Deep mode: Triggered when:

  • Provider is brevo AND the template contains nested loops, multiple filters, or complex conditional nesting
  • The script flags patterns that could benefit from LLM judgment
  • The user explicitly requests deep mode
  • Inline HTML is provided (run LLM conversion directly)

Step 2: Run the converter script

Execute the Python converter script:

python3 {skill_dir}/scripts/converter.py \
  --provider {provider} \
  --input {input_path} \
  --output {output_dir}

Where {skill_dir} is the directory containing this SKILL.md file.

Read the output:

  • Exit code 0: clean conversion, no flags. Proceed to Step 4.
  • Exit code 1: conversion completed with flags. Proceed to Step 3.
  • Exit code 2: error. Report to user and stop.

Read the .report.txt file(s) generated alongside each converted template. For bulk conversions, also read _summary.txt.

Note: When flags are present, the script automatically:

  • Prepends a <!-- WARNING: ... --> comment at the top of the converted file
  • Wraps unsupported syntax in <!-- FLAGGED [RULE]: message --> HTML comments so the file can be pasted into the Mailtrap editor without triggering parser errors

Step 3: Handle flags (Deep mode)

For each flag in the report:

  1. Read the flagged line in the original template.
  2. Consult references/conversion-rules.md for the specific rule and recommended action.
  3. Categorize the flag:
    • App-layer change required (e.g., formatDate, comparison helpers): Cannot be resolved in the template. Report to the user with a clear explanation of what they need to change in their application code. Suggest the replacement variable name.
    • Template-level fix possible (e.g., Brevo nested loops, Mandrill mc:edit regions): Apply the conversion using LLM judgment. Show the user the before/after and ask for confirmation before writing.
    • Ambiguous (e.g., Postmark closing tag mismatch): Show the user both the original context and the converted output. Ask them to verify.

Present flags grouped by category:

## Conversion Complete

### Auto-converted: [count] changes
[Brief summary or collapsed details]

### Needs your application code: [count] flags
[For each: what to change, why, suggested variable name]

### Needs verification: [count] flags
[For each: show before/after, ask for confirmation]

Step 4: Present results

Single file:

Converted: {filename}
Changes: [count] | Flags: [count]
Output: {output_path}

[Show the conversion report summary]
[If flags exist, show the categorized flag breakdown from Step 3]

Bulk conversion:

Converted: [count] files
Total changes: [count] | Total flags: [count]
Clean: [count] files | Needs review: [count] files
Output: {output_dir}

[Show the summary report]
[List files needing review with their specific flags]

Step 5: API field mapping reminder

After template conversion, always remind the user about the API-side changes they need to make. Reference the quick mapping table:

ProviderOld template fieldOld variables fieldMailtrap fieldMailtrap variables
SendGridtemplate_idpersonalizations[].dynamic_template_datatemplate_uuidtemplate_variables
Mailguntemplatet:variablestemplate_uuidtemplate_variables
Mandrilltemplate_nameglobal_merge_vars + merge_varstemplate_uuidtemplate_variables
PostmarkTemplateId/TemplateAliasTemplateModeltemplate_uuidtemplate_variables
BrevotemplateIdparamstemplate_uuidtemplate_variables
Amazon SESTemplateName/TemplateArnTemplateDatatemplate_uuidtemplate_variables

Only show the row for the provider that was just converted.

Inline conversion (no file)

If the user pastes template HTML directly in chat instead of providing a file path:

  1. Identify the source provider (ask if not stated).
  2. Apply the conversion rules from references/conversion-rules.md directly using LLM intelligence.
  3. Comment out unsupported syntax in the converted output by wrapping it in <!-- FLAGGED [RULE]: message --> HTML comments (same format as the script). This prevents editor errors when the user pastes the output into Mailtrap.
  4. If there are flags, prepend a <!-- WARNING: ... --> comment at the top of the converted output noting how many flagged patterns need resolution.
  5. Present the converted Handlebars output with a list of changes made.
  6. Flag any patterns that need app-layer changes.
  7. Offer to save the result to a file.

This mode always uses Deep mode (LLM) since there is no file to pass to the script.

Rules

  • Never silently skip a flagged pattern. Every flag must be reported to the user.
  • Never modify the original file. Converted output always goes to the output directory.
  • Preserve HTML structure. Only modify template syntax (variables, conditionals, loops, helpers). Do not touch HTML tags, attributes, CSS, or non-template content.
  • When in doubt, flag. If a pattern is ambiguous, flag it for manual review rather than making an incorrect conversion.
  • Report counts. Always show the number of changes and flags so the user knows the scope.
  • One provider at a time. If a directory contains templates from multiple providers, ask the user to separate them or specify the provider for the batch.

GitHub Repository

mailtrap/mailtrap-skills
Path: skills/converting-email-templates
0
FAQ

Frequently asked questions

What is the converting-email-templates skill?

converting-email-templates is a Claude Skill by mailtrap. Skills package instructions and resources that Claude loads on demand, so Claude can perform converting-email-templates-related tasks without extra prompting.

How do I install converting-email-templates?

Use the install commands on this page: add converting-email-templates to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.

What category does converting-email-templates belong to?

converting-email-templates is in the Meta category, tagged ai.

Is converting-email-templates free to use?

Yes. converting-email-templates is listed on AIMCP and free to install.

Related Skills

content-collections
Meta

This skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.

View skill
polymarket
Meta

This skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.

View skill
creating-opencode-plugins
Meta

This skill helps developers create OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It provides the plugin structure, event API specifications, and implementation patterns for JavaScript/TypeScript modules. Use it when you need to intercept, monitor, or extend the OpenCode AI assistant's lifecycle with custom event-driven logic.

View skill
sglang
Meta

SGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.

View skill