Send Hono email from any runtime that speaks fetch. No Node-only email dependency required.
Use the same server-side request shape on Workers, Deno, Bun, or Node, then trace the accepted message through signed delivery events.
✓Edge-ready. One fetch call, no Node-only dependencies.
One request, complete trace
Request
POST /api/v1/emails
Authorization: Bearer aem_…
Idempotency-Key: welcome-8f21
{ "to": "[email protected]", "template": "welcome" }
202 Accepted
{ "id": "msg_7ca31", "status": "queued" }
[ 01 / 03 ]Integration shape
Keep the integration portable without making it vague.
Use a typed Hono handler
A plain fetch call keeps the send portable; runtime bindings still determine how the secret and background work are handled.
Publish product events
Publish product events from the handler that validates and commits the action, so flows do not depend on client telemetry.
Verify the webhook
Hono hands you the untouched Request via c.req.raw, which is exactly what signature verification needs.
[ 02 / 03 ]Server quickstart
Queue one email from a typed Hono handler.
The handler returns an accepted message ID while delivery continues outside the request.
Hono's standards-based request model maps directly to the REST API.
app.post("/welcome", async (c) => {
const input = await c.req.json();
return fetch(EMAIL_URL, { method: "POST",
headers: authHeaders(`welcome-${input.userId}`),
body: JSON.stringify({ to: input.email, template: "welcome" }) });
});Accepted response
{ "id": "msg_7ca31", "status": "queued" }Questions people ask us
Ship portable email from your Hono runtime.
Queue a message with fetch and verify its delivery without adding a Node-only client.