Claude-code-minoan 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'.
git clone https://github.com/tdimino/claude-code-minoan
T=$(mktemp -d) && git clone --depth=1 https://github.com/tdimino/claude-code-minoan "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/integration-automation/resend" ~/.claude/skills/tdimino-claude-code-minoan-resend && rm -rf "$T"
skills/integration-automation/resend/SKILL.mdResend 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
toexport RESEND_API_KEY=re_xxxxxxxxx~/.config/env/secrets.env - Verify domain (optional): By default, send from
(test only). For production, verify a domain at https://resend.com/domainsonboarding@resend.dev - 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 "recipient@example.com" \ --subject "Hello from Claude" \ --body "This is a test email." # HTML email from a file python3 ~/.claude/skills/resend/scripts/send.py \ --to "recipient@example.com" \ --subject "Weekly Report" \ --html report.html # Pipe content as body echo "Pipeline output here" | python3 ~/.claude/skills/resend/scripts/send.py \ --to "recipient@example.com" \ --subject "Build Results" # Multiple recipients with CC python3 ~/.claude/skills/resend/scripts/send.py \ --to "alice@example.com" "bob@example.com" \ --cc "manager@example.com" \ --subject "Meeting Notes" \ --body "Attached are the notes from today." # With attachments python3 ~/.claude/skills/resend/scripts/send.py \ --to "recipient@example.com" \ --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 "tom@minoanmystery.org" \ --to "recipient@example.com" \ --subject "Test" \ --body "Sent from a verified domain." # Inline HTML string python3 ~/.claude/skills/resend/scripts/send.py \ --to "recipient@example.com" \ --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 "recipient@example.com" \ --subject "Test" \ --body "Hello" \ --dry-run
Parameters
python3 ~/.claude/skills/resend/scripts/send.py [OPTIONS]
| Flag | Description | Required |
|---|---|---|
| Recipient email address(es) | Yes |
| Email subject line | Yes |
| Plain text body (or pipe via stdin) | One of --body, --html, or stdin |
| HTML body: path to .html file, or inline HTML string | One of --body, --html, or stdin |
| Sender address (default: ) | No |
| CC recipients | No |
| BCC recipients | No |
| Reply-to address | No |
| File paths to attach | No |
| 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 |
|---|---|
| |
| |
| |
| |
# 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:
— simulates successful deliverydelivered@resend.dev
— simulates a bouncebounced@resend.dev
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 |
|---|---|
| Add to |
| Ensure and are provided, plus body content |
on from | Default only works for test sends. Verify a domain at resend.com/domains |
| Wait 1 second between sends (2 req/s limit) |
| Attachment not found | Use absolute paths or paths relative to CWD |