Test email
DeliverabilityTest email
Send yourself a test before you launch.
Render the design and send it to your own address via the send endpoint (SMTP or your provider):
curl -X POST https://api.mailkaro.com/v3/emails \
-H "Authorization: Bearer sk_live_…" \
-H "content-type: application/json" \
-d '{ "design": {…}, "to": "you@example.com", "subject": "Test" }'A button in the editor
Give the editor a sendTestEmail function and the toolbar gets a "Send a test email" button. It opens a small form (address, subject), calls your function with the rendered HTML, and shows "Sent to ..." or the message of any error you throw. The editor never holds a key or an address to send from: your function runs on your side, so call your own backend, which calls POST /v3/emails with a server key. The address is remembered in the browser, and the HTML includes the merge tag preview values and the language chosen in Preview.
<EmailEditor
config={{
sendTestEmail: async ({ html, subject, to }) => {
const res = await fetch("/api/test-email", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ html, subject, to })
});
if (!res.ok) throw new Error("We could not send the test email.");
}
}}
/>Hide the button with ui.toolbar.sendTestEmail: false. A plan that restricts the toolbar to an allowed list (allowed_toolbar_actions) also hides it unless send_test_email is in that list.