Email SDK
Adapters

ZeptoMail

Send through Zoho ZeptoMail with automatic send-mail token prefixing.

The ZeptoMail adapter calls the Zoho ZeptoMail email API with plain fetch. Paste your send mail token as-is: the adapter prepends Zoho's Zoho-enczapikey authorization prefix automatically when it is missing.

ZeptoMail logo
ZeptoMail
@opencoredev/email-sdk/zeptomail
OfficialNot API testedRequest tested
Open website

Configure

Create a Mail Agent in ZeptoMail, copy its send mail token, and verify the sending domain.

lib/email.ts
import { createEmailClient } from "@opencoredev/email-sdk";
import { zeptomail } from "@opencoredev/email-sdk/zeptomail";

export const email = createEmailClient({
  adapters: [zeptomail({ token: process.env.ZEPTOMAIL_TOKEN! })],
});

Prop

Type

Send

ZeptoMail maps cc, bcc, replyTo, and attachments. Display names carry through to ZeptoMail's email_address recipient objects, and html/text become htmlbody/textbody.

const result = await email.send({
  from: { email: "security@acme.com", name: "Acme Security" },
  to: [{ email: "user@example.com", name: "Ada" }],
  replyTo: "support@acme.com",
  subject: "Reset your password",
  html: '<p><a href="https://acme.com/reset?t=abc123">Reset your password</a></p>',
  text: "Reset your password: https://acme.com/reset?t=abc123",
});

console.log(result.id); // ZeptoMail request_id (falls back to messageId or id)

No headers, tags, or metadata

The adapter does not map custom headers, tags, or metadata to the ZeptoMail API, so any of them throws an EmailValidationError before a request is made. See the field support matrix for alternatives.

Verify from the CLI

ZEPTOMAIL_TOKEN="..." npx email-sdk doctor --adapter zeptomail
ZEPTOMAIL_TOKEN="..." npx email-sdk send \
  --adapter zeptomail \
  --from "Acme <hello@acme.com>" \
  --to user@example.com \
  --subject "ZeptoMail smoke test" \
  --text "It works" \
  --dry-run

Drop --dry-run to send for real. ZeptoMail scopes each token to one Mail Agent, so a valid token can still fail when the from domain is not verified under that agent. Only a live send confirms the token, the agent, and the sender domain all line up.

On this page