Install
openclaw skills install resend-send-native-nodeSend email via Resend.com's HTTPS API - native Node.js, zero dependencies. Use when the user explicitly asks to email, send a message, mail a report, or deliver a notification to an email address. Externally sends email only with --send; defaults to dry-run and requires RESEND_ALLOWED_TO allowlist for real sends. Requires RESEND_API_KEY in the process environment for real sends. No OAuth, no 2FA, no Gmail required.
openclaw skills install resend-send-native-nodeSend email via the Resend.com HTTPS API.
Native Node.js. Zero dependencies. One POST call for real sends. Small enough to audit directly.
Trigger phrases: "email me", "send an email", "mail this to", "send a notification", "email the report".
Use this when:
Do NOT use this when:
onboarding@resend.dev sender looks transactional)This skill is send-only, but it is still externally mutating. For agent use:
--send only after the user explicitly approves that exact recipient, subject, and body.RESEND_ALLOWED_TO=addr@example.com,other@example.com is set in the process environment for approved recipients.The script is in scripts/send.mjs.
Basic:
node "<skill-dir>/scripts/send.mjs" --to "you@example.com" --subject "Hello" --body "Hi there"
Without --send, this prints a dry-run payload and does not send.
With from address override:
node "<skill-dir>/scripts/send.mjs" --from "OpenClaw <onboarding@resend.dev>" --to "you@example.com" --subject "Hello" --body "Hi"
HTML body:
node "<skill-dir>/scripts/send.mjs" --html --to "you@example.com" --subject "Styled" --body "<h1>Hi</h1><p>Hello</p>"
Dry run (no send, just print the payload):
node "<skill-dir>/scripts/send.mjs" --dry-run --to "you@example.com" --subject "Test" --body "..."
Real send (only after explicit approval):
node "<skill-dir>/scripts/send.mjs" --send --to "you@example.com" --subject "Weekly report" --body "Approved report text"
| Flag | Required? | Purpose |
|---|---|---|
--to | yes | Comma-separated recipient addresses |
--subject | yes | Message subject |
--body | yes | Inline message body |
--cc | no | Comma-separated cc |
--bcc | no | Comma-separated bcc |
--from | no | Override sender, e.g. "OpenClaw <onboarding@resend.dev>" |
--reply-to | no | Reply-to address |
--html | no | Body is HTML instead of plain text |
--dry-run | no | Don't send; print the JSON payload |
--send | no | Actually send. Without this, the script dry-runs by default |
-h, --help | no | Show help |
--body-file is intentionally not supported in the public package. Review file contents yourself and pass approved text with --body.
Requires process environment values:
RESEND_API_KEY - starts with re_...RESEND_ALLOWED_TO - comma-separated recipient allowlist for real sendsRESEND_ALLOWED_TO; without it the script refuses --sendHow to get one:
Export it in the runtime process environment:
$env:RESEND_API_KEY="<your-resend-key>"
$env:RESEND_ALLOWED_TO="you@example.com,reports@example.com"
By default, emails are sent from onboarding@resend.dev - Resend's default sender. This works immediately without any domain setup.
For a custom domain (later, optional):
--from "Reports <reports@your-verified-domain.example>"RESEND_API_KEY from the process environment onlyhttps://api.resend.com/emails--send is presentRESEND_ALLOWED_TO for real sends; fail-closed if it is missing--body-fileapi.resend.comOn success:
sent to you@example.com (subject: Hello) - resend-id: c8f43f2a-...
On failure, clear error on stderr with a non-zero exit code.
RESEND_API_KEY in the process environmentonboarding@resend.dev or verify your own domain)onboarding@resend.dev (no domain needed)