EmailBuilder.ai
Troubleshooting

Email not rendering

Preview is blank, broken, or shows an error — here's how to diagnose and fix it.

Preview pane shows "Could not render" or is blank

The editor couldn't compile your MJML into HTML.

Likely causes:

  • An unclosed tag — <mj-section> without </mj-section>. Most often after a copy-paste from another source.
  • An invalid attribute — e.g. <mj-text padding-top="ten">. Padding requires units (10px, 2em).
  • A tag in the wrong place — <mj-column> directly inside <mj-body> without an <mj-section> wrapper.
  • A typo in a tag name — <mj-tex> instead of <mj-text>.

How to fix:

  1. Switch to Code mode. The editor automatically formats your MJML on entry so indentation makes structure mistakes easier to spot.
  2. Look for the error banner above the preview. It includes line numbers and a short hint.
  3. If you can't see the error, switch back to Visual mode and undo (⌘Z) until the preview returns. The change that broke it is your culprit.

If you've inherited a complex template (e.g. from an inspiration conversion), the MJML reference is the source of truth for valid tag/attribute combinations.

Preview works but parts are misaligned or broken

The MJML compiled, but the rendered HTML doesn't match what you intended.

Likely causes:

  • Mixing fixed widths with full-width="full-width" on a section — these conflict.
  • A nested column structure that exceeds the section width (multiple columns each set to width="50%" but with explicit padding pushing past 100%).
  • A custom CSS class via <mj-class> that doesn't apply where you expected — MJML's mj-class only applies to elements within the same <mj-attributes> scope.

How to fix:

  • Remove explicit widths and padding on inner elements; let MJML auto-balance.
  • Use the mobile preview toggle to confirm responsive behavior — the mobile view often reveals issues that desktop hides.
  • For custom layouts, build the layout in a separate section and copy it back once it works.

Images appear broken (red X or alt text only) in test sends

The image URL isn't reachable by the recipient's email client.

Likely causes:

  • The image is hosted somewhere private (e.g. a local file path, a localhost URL, an internal CDN with IP-based ACLs).
  • The image URL uses HTTP instead of HTTPS — most email clients block mixed content.
  • The image is on a service that requires authentication (Google Drive, Dropbox raw links).

How to fix:

  • Upload the image to your EmailBuilder media library (Files button). Images uploaded there are served from EmailBuilder's CDN, which is reachable from any email client.
  • For external CDN images, ensure they're served over HTTPS and don't require authentication.

Custom fonts don't show up

Email clients have spotty support for web fonts. Gmail strips @font-face entirely; Outlook desktop ignores them; Apple Mail respects them.

How to fix:

  • Use the font-family attribute on <mj-text> and other typographic elements. Include fallbacks to email-safe fonts: font-family="Inter, Arial, sans-serif".
  • Don't rely on custom fonts for body copy. Use them for accents (headers, callouts) where the fallback is acceptable.
  • Test in Gmail, Outlook desktop, and Apple Mail before assuming a font works everywhere.

Background images don't show in Outlook

Outlook desktop has notoriously poor support for CSS background images.

How to fix:

  • Use <mj-section background-url="..."> rather than a CSS background. MJML generates Outlook-specific VML fallbacks under the hood.
  • Test the result in Outlook desktop before shipping a campaign.

Email looks fine in preview but renders narrow in Gmail

Gmail clips emails over ~102 KB of HTML and shows a "View entire message" link. Below the clip line, your email may look truncated.

How to fix:

  • Compress images. Most email images can be JPEG at 70% quality with no visible quality loss; PNGs can often be SVG or WebP.
  • Reduce the HTML weight: prefer <mj-section> over deeply nested structures, remove unused <mj-style> rules, avoid inlining repeated CSS.
  • For long emails (digests with many items), consider a "View web version" link — EmailBuilder publishes a web version automatically.

I edited the MJML and now Visual mode looks weird

Visual mode and Code mode share the same source of truth — but Visual mode adds editing chrome (handles, format toolbars) that only appears when it recognises the structure.

How to fix:

  • Drop custom <mj-class> declarations into <mj-attributes> (inside <mj-head>), not directly in the body.
  • Wrap raw HTML in <mj-raw> — Visual mode skips its contents intentionally; this is correct.
  • If a section uses a non-standard MJML tag (e.g. a community component), Visual mode won't recognise it and you'll see a generic placeholder. Switch to Code mode to edit.

Linked module renders empty

A <mj-module module-id="..."> reference renders as empty when the referenced module can't be resolved.

Likely causes:

  • The module was deleted from your account.
  • The module-id is wrong — typo or pointing at a module in a different account.
  • The module exists but its own MJML is broken (recursive error).

How to fix:

  • Right-click the section → Edit Module to open the linked module in a new tab. If it 404s, the module is gone.
  • Right-click the section → Disconnect Module to drop the reference and insert the module's last-known MJML inline (if we have it cached).
  • If the linked module's MJML is broken, fix it in the module editor — the change will propagate to every email referencing it.

Email saves but stats never appear after sending

Stats (opens, clicks, bounces) come from the ESP, not from EmailBuilder. They appear once the ESP reports them back.

Likely causes:

  • The send hasn't been delivered yet. Stats are populated after the ESP starts processing — typically within minutes for marketing sends, sometimes longer for large lists.
  • The ESP doesn't support stats for this send type — e.g. SES doesn't expose open rates without explicit CloudWatch setup.
  • The ESP connection has lost auth — check the connection's status badge on Account → Integrations.

How to fix:

  • Wait 30–60 minutes for stats to populate.
  • Check the ESP's own dashboard for the send. If the ESP shows opens but EmailBuilder doesn't, contact support — it may be an auth refresh issue.
  • For SES specifically, enable open/click tracking in your SES configuration set before sending.

If the page you need isn't here, email [email protected] with the email ID, your account email, and screenshots — we'll dig in.

On this page