A test send, your ESP's preview, a rendering-test service, a screenshot, the .html as an attachment, or a hosted page link: what each one shows the client, what a browser preview can and can't prove about an email, and the combination that gets sign-off without surprises.
The template is built. You've sent it to your own inbox a dozen times, fixed the Outlook spacing, and checked it on your phone. Now the client has to approve it before it goes into the ESP and out to their list.
You could send a screenshot, but the links can't be clicked. You could send a test email, and then it sits in their inbox, gets forwarded to three colleagues, and the edits come back as a reply-all. You could attach the .html, and their mail filter might not let it through.
Each of those is the right tool for something. The trick is noticing that "approve the email" is two different requests.
Most sign-off is about the first. Does the headline say the right thing, is the offer correct, is the legal line there, do the buttons go to the right pages, is the logo the new one. The client is checking content and layout, and they can do that anywhere the email renders faithfully.
The second question, whether the email survives Outlook, dark mode and a phone, is a technical check. It's usually your job, not theirs, and the client can't do it from their own inbox anyway: their inbox is one mail app out of dozens.
Keep those apart and the choice of tools gets simple.
Six routes, each one built for a different job:
| Way | What the client sees | What it's built for | Where it gets awkward |
|---|---|---|---|
| A test send from your ESP | The real email, in their own inbox | The final check that it arrives and renders | One mail app only; can be forwarded; edits come back as email replies |
| Your ESP's preview or share feature | A preview inside or linked from the ESP | Checking inside the tool you'll send from | Depends on your ESP and plan, and the client may need to be let into it |
| A rendering-test service (Litmus, Email on Acid) | Screenshots of the email in many mail apps and devices | Technical QA across clients before sending | Paid (Email on Acid has no free plan; Litmus prices on request), and built for the developer, not for client comments |
| A screenshot or PDF | A picture of the email | A quick look at the design | Links can't be clicked, text can't be searched for typos |
| The .html as an attachment | A file to download and open in a browser | Handing over the source | Download step; a company's mail filter can be set to block .html attachments |
| A hosted page link (miinideck) | The email rendered as a web page in their browser, at an unguessable address | Reviewing copy, layout and links before anything is sent | A browser is not an inbox (see the next section) |
For the wider trade-off between attaching a file and sending a link, an email attachment vs a link for deliverables covers size, rendering and control. And if you've been sending screen recordings of the email for review, screen recording vs a live link goes through what each one loses.
This is the honest boundary of the link route, and it's worth saying to the client too.
What it proves: the copy is right, the layout reads the way you intended at desktop and phone widths, the images load, and every link goes where it should. That's most of what a client is actually approving.
What it can't prove:
So the combination that works: a web link for the client to sign off copy and layout, then your own rendering check (a testing service, or your own set of test inboxes), then one test send as the last step before the campaign goes out.
They won't break it, but they will show.
Before the ESP fills them in, merge tags appear as literal text: a Mailchimp first-name field shows as *|FNAME|*, and other ESPs use their own syntax. Tell the client once, in the message with the link, that anything in that shape will be filled in at send time. Otherwise the first comment you get back is "there's a typo in the greeting".
Links in the preview are your raw links. ESPs that track clicks typically rewrite links when the campaign is sent, so the client clicking a link in the preview doesn't show up in your campaign report.
One practical point: if the template references images by a relative path on your machine (images/hero.png), the images won't come with a single .html file. Either use the absolute image URLs the ESP will host them at, or zip the HTML together with its images folder.
The short version:
Whichever you use for review, try not to run revision rounds by attachment. Each round becomes a new file in their downloads and a new question about which one is current. It's the same problem a Google Drive link vs a private link looks at for any file that keeps changing.
That's the job miinideck is built around: a finished page going to specific people, where you keep hold of the link.
You upload the email's .html (or a ZIP with its images) and get a link ending in 32 random characters. The page tells search engines not to index it, which matters for a campaign that hasn't gone out: an announcement or a sale shouldn't be findable before its send date. The client opens the link in any browser. They don't need an account, and nothing lands in their inbox except your message with the link.
Then the review itself:
The limits, stated plainly: an email template is small, so the No-account cap of 3 MB won't matter, but a No-account link runs 7 days and can't be replaced, which you'll want for revision rounds. Free-tier links also show a small "Powered by" footer below the page, which isn't part of your email. Paid plans drop it. And again: the link shows the email in a browser. It isn't an inbox test.
If the template is ready, drop the .html in and get a link. There's no account needed to try it. And if you're sorting out where files like this should live in general, where to put a file online maps every option by what you're holding.
Postman's published docs, SwaggerHub, a hosted docs portal, GitHub Pages, the raw OpenAPI file, or one rendered HTML page behind a private link: what each is built for, how to turn a spec into a single page with one command, and what to strip out before anyone outside sees it.
Quarto Pub, RPubs, Posit Connect Cloud, GitHub Pages or Netlify, an HTML attachment, or a private link: what each one is built for, why a rendered report loses its styling when you send the HTML on its own, and which route fits a report meant for a client or an advisor.
A screenshot, an HTML attachment, Datawrapper, Flourish, Tableau Public, a public site, a drive, or a private link: what each one is built for, who ends up able to see the chart, and why the same Plotly chart can be 4.8 MB or 12 KB.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.