Skip to main content

Documentation Index

Fetch the complete documentation index at: https://jetemail.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

jetemail email wraps the transactional send endpoints. Two subcommands:
SubcommandEndpointDescription
email sendPOST /emailSend a single message
email batchPOST /email-batchSend up to N messages in one request
jetemail send … is a shorthand alias for jetemail email send …. Authentication uses your transactional key (transactional_…). Set it with jetemail login, JETEMAIL_TRANSACTIONAL_KEY, or --transactional-key.

email send

jetemail email send \
  --from 'noreply@example.com' \
  --to alice@example.org --to bob@example.org \
  --subject 'Welcome' \
  --html @welcome.html \
  --attach ./invoice.pdf \
  --idempotency-key "$(uuidgen)"
If --from, --to, or --subject aren’t supplied in an interactive shell, you’ll be prompted for the missing values. The body (--html / --text) is required for an actual send.

Flags

FlagDescription
--from <addr>Sender address (e.g. name@yourdomain.com).
--to <addr>Recipient address. Repeat for multiple.
--subject <str>Subject line.
--html <src>HTML body. Literal string, @file, or - for stdin.
--text <src>Plain-text body. Literal string, @file, or -.
--cc <addr>CC address. Repeatable.
--bcc <addr>BCC address. Repeatable.
--reply-to <addr>Reply-To address.
--header 'Name: Value'Custom header. Repeatable.
--attach <spec>Attachment. @path/to/file (auto-base64) or a JSON object literal. Repeatable.
--euRoute through the EU region.
--scheduled-at <iso8601>Schedule the send. See Scheduled email.
--idempotency-key <key>Idempotency-Key header. Same key replays the original response. See Idempotency.
--body-json <src>Whole body. Merged underneath typed flags. See Body & field escape hatches.
--field key=valueOverride a single top-level field. Repeatable.

Body sources

--html, --text, and --body-json all accept the same three sources:
SourceMeaning
Literal--html "<p>Hi</p>"
@pathRead from a file: --html @welcome.html
-Read from stdin: cat welcome.html | jetemail send … --html -

Attachments

# From a path (auto-encoded base64, content-type inferred)
jetemail send --attach ./invoice.pdf

# Multiple
jetemail send --attach ./a.pdf --attach ./b.png

# Full control via a JSON object literal
jetemail send --attach '{"filename":"data.json","contentType":"application/json","content":"eyJrIjoidiJ9"}'

Examples

Plain text:
jetemail send \
  --from no-reply@example.com \
  --to alice@example.org \
  --subject "Receipt #1234" \
  --text "Thanks for your order."
HTML from a template file with overrides:
jetemail send \
  --body-json @welcome-template.json \
  --to alice@example.org \
  --subject "Welcome, Alice"
Scheduled, EU-routed, idempotent:
jetemail send \
  --from billing@example.com \
  --to customer@example.org \
  --subject "Your monthly invoice" \
  --html @invoice.html \
  --attach ./invoice-2026-04.pdf \
  --eu \
  --scheduled-at 2026-05-15T09:00:00Z \
  --idempotency-key "invoice-2026-04-customer-42"

email batch

Send many messages in one request. Pass a JSON document containing either the full batch payload or just the array of email objects.
# Either shape works:
echo '[{"to":"a@x.com","from":"n@y.com","subject":"hi","text":"hi"}, …]' \
  | jetemail email batch --body-json -

jetemail email batch --body-json @batch.json
batch.json can be:
{ "emails": [ { "to": "a@x.com",  }, { "to": "b@x.com",  } ] }
or the array form:
[ { "to": "a@x.com",  }, { "to": "b@x.com",  } ]
A single-object body is treated as a batch of one.

Flags

FlagDescription
--body-json <src>Required. JSON payload (@file, -, or literal).
--idempotency-key <key>Replay the response if the same key is used again.