Agent skill
resend
Send transactional or notification emails via the Resend API — text and HTML content, multiple recipients, CC/BCC, reply-to, and file attachments. Single Python script with stdin pipe support. Triggers on 'send email', 'transactional email', 'email notification', 'Resend API', 'send via Resend'.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/resend-tdimino-claude-code-minoan
SKILL.md
Resend Email Skill
Send emails via the Resend transactional email API.
IMPORTANT: Confirm Before Sending
Always confirm with the user before sending an email. Show them the recipient(s), subject, and body content and get explicit approval. Email is not reversible.
When to Use This Skill
- Sending a transactional or notification email
- Sending HTML email (inline or from a file)
- Sending email with attachments
- Piping content from another command into an email body
Prerequisites
- API Key: Get a Resend API key at https://resend.com/api-keys (format:
re_xxxxxxxxx) - Add to secrets: Add
export RESEND_API_KEY=re_xxxxxxxxxto~/.config/env/secrets.env - Verify domain (optional): By default, send from
[email protected](test only). For production, verify a domain at https://resend.com/domains - Install requests:
uv pip install --system requests
Credentials checked in order: RESEND_API_KEY env var > ~/.config/env/secrets.env > ~/.claude.json
Quick Start
# Simple text email
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Hello from Claude" \
--body "This is a test email."
# HTML email from a file
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Weekly Report" \
--html report.html
# Pipe content as body
echo "Pipeline output here" | python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Build Results"
# Multiple recipients with CC
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" "[email protected]" \
--cc "[email protected]" \
--subject "Meeting Notes" \
--body "Attached are the notes from today."
# With attachments
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Invoice" \
--body "Please find the invoice attached." \
--attachments invoice.pdf
# Custom from address (requires verified domain)
python3 ~/.claude/skills/resend/scripts/send.py \
--from "[email protected]" \
--to "[email protected]" \
--subject "Test" \
--body "Sent from a verified domain."
# Inline HTML string
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Styled Email" \
--html "<h1>Hello</h1><p>This is <strong>bold</strong>.</p>"
# Dry run (print payload without sending)
python3 ~/.claude/skills/resend/scripts/send.py \
--to "[email protected]" \
--subject "Test" \
--body "Hello" \
--dry-run
Parameters
python3 ~/.claude/skills/resend/scripts/send.py [OPTIONS]
| Flag | Description | Required |
|---|---|---|
--to EMAIL [EMAIL...] |
Recipient email address(es) | Yes |
--subject TEXT |
Email subject line | Yes |
--body TEXT |
Plain text body (or pipe via stdin) | One of --body, --html, or stdin |
--html FILE_OR_STRING |
HTML body: path to .html file, or inline HTML string | One of --body, --html, or stdin |
--from EMAIL |
Sender address (default: Tom di Mino <[email protected]>) |
No |
--cc EMAIL [EMAIL...] |
CC recipients | No |
--bcc EMAIL [EMAIL...] |
BCC recipients | No |
--reply-to EMAIL |
Reply-to address | No |
--attachments FILE [FILE...] |
File paths to attach | No |
--dry-run |
Print the payload without sending | No |
Body resolution: --body and --html can be combined for multipart email (text + HTML). If neither is provided, stdin is used as plain text. --body "" sends an empty text part.
Sender Aliases
Use --from ALIAS as a shorthand for named senders:
| Alias | Expands to |
|---|---|
tom |
Tom di Mino <[email protected]> |
kothar |
Kothar wa Khasis <[email protected]> |
claudius |
Claudius, Artifex Maximus <[email protected]> |
minoan |
Minoan Mystery <[email protected]> |
# Send as Kothar
--from kothar
# Send as Claudius
--from claudius
If --from doesn't match an alias, it's used as-is (full email or Name <email> format).
Test Addresses
Resend provides test addresses that don't affect domain reputation:
[email protected]— simulates successful delivery[email protected]— simulates a bounce
Rate Limits
Resend enforces 2 requests per second. The script does not batch or retry — if sending multiple emails, add a 1-second delay between invocations.
Troubleshooting
| Problem | Fix |
|---|---|
RESEND_API_KEY not found |
Add export RESEND_API_KEY=re_xxx to ~/.config/env/secrets.env |
missing_required_field |
Ensure --to and --subject are provided, plus body content |
validation_error on from |
Default [email protected] only works for test sends. Verify a domain at resend.com/domains |
rate_limit_exceeded |
Wait 1 second between sends (2 req/s limit) |
| Attachment not found | Use absolute paths or paths relative to CWD |
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?