Token导航 LogoToken导航

Agent Skill · 研究检索

email-resend(重新发送电子邮件)

email-resend 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

email-resend 是研究检索类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 3,784。

总安装 39,780周安装 1,625GitHub Stars 公开资料未说明下载 12,870核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.14

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:email-resend(重新发送电子邮件)
来源仓库:https://github.com/ivelin/email-resend
安装命令:
openclaw skills install email-resend
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install email-resend

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

利用 Resend API 发送与接收电子邮件,支持定时通知与草稿生成。适用于需要高可靠性投递与异步事件提醒的应用系统。可通过 cron 调度实现无人值守的通知推送机制。依赖第三方 API 服务,需注册账号并绑定域名验证所有权。建议监控配额使用情况,避免因超限导致服务中断。

email-resend 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install email-resend;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

email-resend 怎么安装?

在终端执行 openclaw skills install email-resend。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

email-resend 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

email-resend 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

email-resend 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

email-resend 用的人多吗?

公开数据是累计安装 39,780 次,近一周安装 1,625 次,下载 12,870 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

email-resend 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
email-resend

重新发送电子邮件 · 本页

39,780—接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

license
Apache-2.0
name
email-resend
version
1.0.14
metadata
clawdbot
requires
env
bins
python
triggers
description
>

License

Apache License 2.0 — See LICENSE file for full text.

Email via Resend

Send and receive emails using the Resend API.

Configuration

No config file needed. The skill auto-discovers settings from:

  1. Environment variables — RESEND_API_KEY (required), DEFAULT_FROM_EMAIL/NAME (optional)
  2. Preferences file — memory/email-preferences.md (from_email, from_name, telegram target)
  3. OpenClaw context — channel, chat_id, thread_id (for cron delivery)

Required Environment Variables

export RESEND_API_KEY="re_123456789"        # Resend API key (required)
# DEFAULT_FROM_EMAIL and DEFAULT_FROM_NAME are optional - loaded from preferences file if not set

Preferences File

The skill reads sender info from memory/email-preferences.md:

---
from_email: you@company.com
from_name: Your Name
telegram:
  target: "CHAT_ID"
  threadId: "THREAD_ID"
---

Scripts check env vars first, then fall back to preferences file.

First-Time Setup

When the skill is first invoked, the sub-agent should:

  1. Check context — OpenClaw context already has:

- context.user.email (from USER.md) - context.channel (from current session) - context.chat_id - context.thread_id (for topics)

  1. Check memory — Use memory_get tool:

- Try: memory_get path="memory/email-preferences.md" - If not found, ask user to create memory/email-preferences.md (NO fallback scanning)

  1. If missing, ask user — Via chat message (IMPORTANT for cron jobs):

- "Which email should I send from?" (from_email) - "What's your display name for sent emails?" (from_name) - "Which channel/topic should I notify you on?" (telegram target + threadId)

Then create memory/email-preferences.md with their answers using the format above.

  1. Commit to memory — Write preferences to persist across sessions:
   write path="memory/email-preferences.md" content="---
   from_email: $EMAIL
   from_name: $NAME
   telegram:
     target: \"$CHAT_ID\"
     threadId: \"$THREAD_ID\"
   ---

   # Email Notification Preferences
   Saved auto-configured
   "

This ensures memory_get finds it in future sessions. Use MD format with YAML frontmatter.

Format (MD with YAML frontmatter):

---
from_email: you@company.com
from_name: Your Name
telegram:
  target: \"123456789\"
  threadId: \"334\"
---

# Email Notification Preferences
- **Updated:** 2026-01-01
- **Purpose:** Default notification channel for email alerts

Important: Store in memory/email-preferences.md (NOT MEMORY.md) - isolated cron jobs can read this file via memory_get but NOT MEMORY.md.

Context Fields (Available in Sub-Agent)

FieldSourceExample
user.emailUSER.mdyou@company.com
user.nameUSER.mdYour Name
channelOpenClawfrom context
chat_idOpenClaw123456789
thread_idOpenClaw334

The skill uses these directly from OpenClaw context — no parsing needed.

Usage

Inbound (Receive)

Cron Setup

There are two ways to configure the cron:

Option 1: Static (Hardcoded Target)

Use this if you always want the same delivery target:

openclaw cron add \
  --name "email-resend-inbound" \
  --cron "*/15 * * * *" \
  --message "Follow instructions in skills/email-resend/cron-prompts/email-inbound.md exactly. If new emails found, include them in your reply." \
  --session isolated \
  --announce \
  --channel telegram \
  --to "-1003748898773:topic:334"
Option 2: Dynamic (From Preferences) — Recommended

This reads your notification preferences from memory/email-preferences.md and configures the cron automatically.

Run:

python3 ~/.openclaw/workspace/skills/email-resend/scripts/configure-cron.py

What it does:

  1. Reads memory/email-preferences.md for your telegram target/threadId
  2. Deletes any existing email-resend-inbound cron
  3. Creates a new cron with your preferred delivery target

First-time setup: If preferences don't exist, it will tell you what to configure.

Parameters:

  • --schedule "cron */15 * * * *" — Run every 15 minutes
  • --session isolated — Required for agentTurn payloads
  • --announce — Enable delivery of results to chat
  • --channel telegram — Delivery channel
  • --to — Telegram target (format: chat_id:topic:thread_id)

Note: The cron prompt reads notification preferences from memory/email-preferences.md. On first run, if preferences are missing, it will ask you for:

  • Which channel for notifications (telegram, discord, etc.)
  • Chat ID and Thread ID (for topics)

Manual Check

python3 ~/.openclaw/workspace/skills/email-resend/scripts/inbound.py

Notification Format

Each new email triggers a notification with:

  • From, Subject, Date
  • Body preview (~2000 chars)
  • Attachment list (if any)
  • Importance: 🔥 HIGH / 📅 MEETING / 📬 NORMAL

Acknowledge Flow (CRITICAL)

NEVER auto-acknowledge emails. Only the user can acknowledge by:

  • Replying to the notification message, OR
  • Typing: done / ack

Emails must remain in pending state until user explicitly acknowledges.

Use draft-reply.py to compose replies with proper quoting.

Important: Always use inline replies ([[reply_to_current]]) to keep messages linked in the thread. This enables:

  • Proper custody chain tracking
  • Reply-to-email tracing
  • Better conversation flow

CRITICAL: When responding via OpenClaw message tool, use replyTo parameter (not [[reply_to_current]] tag):

message(action="send", channel="<from-context>", replyTo="<msg_id>", ...)

Scripts

ScriptPurpose
inbound.pyCheck emails, send notifications
draft-reply.pyDraft reply workflow with quoting & threading
outbound.pySend emails directly
download_attachment.pyDownload attachments from inbound emails

Downloading Attachments

To download attachments from an inbound email:

# List attachments (shows IDs)
python3 scripts/download_attachment.py <email_id> --list

# Download all to directory
python3 scripts/download_attachment.py <email_id> --output-dir ./attachments

# Download specific attachment
python3 scripts/download_attachment.py <email_id> --attachment-id <attachment_id>

Note: The API path is /emails/receiving/{email_id}/attachments (not the standard /emails/ path).

State Files

  • memory/email-resend-inbound-notified.json — pending/acknowledged emails
  • memory/email-message-map.json — notification message_id → email_id (legacy)
  • memory/email-custody-chain.json — Full DAG of email → notification → actions
  • memory/email-msg-to-chain.json — notification message_id → chain lookup
  • memory/email-draft-state.json — Active draft state (email_id, status, reply_content)

See docs/custody-chain.md for DAG design.

Outbound (Send)

python3 ~/.openclaw/workspace/skills/email-resend/scripts/outbound.py \
  --to "recipient@example.com" \
  --subject "Hello" \
  --body "Message text"

# With attachments
python3 ~/.openclaw/workspace/skills/email-resend/scripts/outbound.py \
  --to "recipient@example.com" \
  --subject "Here's the file" \
  --body "See attachment" \
  --attachment ./file.pdf \
  --attachment ./image.png

⚠️ CRITICAL: Email Threading Rule (2026-02-22)

MANDATORY: Always use draft-reply.py for replying to emails.

This is non-negotiable. Failure to follow this rule will result in broken Gmail threading.

Why This Matters

  • Gmail threads emails based on In-Reply-To AND References headers
  • Using wrong headers = reply appears as NEW thread = context lost
  • There's no way to fix this after sending

✅ Correct Workflow (ALWAYS USE THIS)

# Step 1: Start draft (fetches Message-ID automatically)
python3 ~/.openclaw/workspace/skills/email-resend/scripts/draft-reply.py start <email_id>

# Step 2: Set reply content
python3 ~/.openclaw/workspace/skills/email-resend/scripts/draft-reply.py content "Your reply"

# Step 3: Send
python3 ~/.openclaw/workspace/skills/email-resend/scripts/draft-reply.py send

⚠️ CRITICAL: Approval Execution Rule (2026-02-22)

When user approves a draft, you MUST execute the send command immediately.

The mistake to avoid:

  • ❌ Show draft for approval → User says "send" → Only acknowledge, don't execute
  • ✅ Show draft for approval → User says "send" → RUN draft-reply.py send → Then confirm

Correct workflow:

1. Show draft for approval
2. User replies "approve", "send", "yes", or "ok"
3. IMMEDIATELY run: draft-reply.py send
4. Only THEN confirm to user

Never:

  • Only acknowledge the approval without executing
  • Ask for confirmation after user already approved
  • Wait to send - do it immediately

❌ NEVER Do These Things

NEVER use outbound.py for replies:

# WRONG - will break threading
python3 ~/.openclaw/workspace/skills/email-resend/scripts/outbound.py \
  --to "x@y.com" --subject "Re: Original" --body "Reply"

NEVER manually construct --reply-to flags:

# WRONG - guessing Message-ID format never works
python3 ~/.openclaw/workspace/skills/email-resend/scripts/outbound.py \
  --to "x@y.com" --subject "Re: Original" --body "Reply" \
  --reply-to "<some-guess>@resend"

NEVER skip the workflow when subject starts with "Re:":

# WRONG - replying without threading headers breaks thread
python3 ~/.openclaw/workspace/skills/email-resend/scripts/outbound.py \
  --to "x@y.com" --subject "Re: Previous Thread" --body "Quick reply"

outbound.py Only For New Emails

outbound.py is for new emails only (not replies):

  • First contact
  • Announcements
  • Emails where you intentionally want a NEW thread

For anything that could be a reply, use draft-reply.py.

Requirements

  • RESEND_API_KEY environment variable set
  • Python requests library

Draft Reply Best Practices

When composing a reply via draft-reply.py:

  1. Always quote the original — Include the original message with > prefix so recipient knows what you're responding to
  1. Use proper threading — Set In-Reply-To and References headers using the original email's Message-ID
  1. Keep subject line — Start with Re: prefix to maintain thread (but avoid "Re: Re:")
  1. Structure:
   Your reply here

   ---

   On [date] [original sender] wrote:
   > quoted original message
   > continues here
  1. Multiple replies supported — After sending, draft is marked as "sent" so you can reply again to the same thread. Use resume command to continue.
  1. No double Re: — If original subject already starts with "Re:", don't add another
  1. Custody Chain — Track full lineage:

- Email → notification → All replies/actions - DAG structure with parent links - Any message traces back to original email

Draft Reply Commands

CommandPurpose
start <email_id>Start a draft reply to an email
resumeContinue a sent thread to reply again
content "text"Set reply content
sendSend the reply
cancelCancel the draft
statusShow current draft status

After sending, use resume to reply again to the same thread — threading headers are preserved.

Run tests:

python3 skills/email-resend/tests/test_inbound.py

Expected: 43+ tests total (test_inbound.py: 37, test_threading.py: 6, test_attachments.py: varies).

If tests fail:

  1. Check which test failed and why
  2. Fix the feature/code to match expected behavior
  3. Or update tests if feature intentionally changed

⚠️ Privacy & Security Considerations

Required Credentials

  • RESEND_API_KEY — Required. Get from https://resend.com API settings. Create with minimal permissions.
  • DEFAULT_FROM_EMAIL / DEFAULT_FROM_NAME — Optional. If not set, loaded from memory/email-preferences.md.

Memory File Access

The skill reads ONLY from explicit preferences file:

  • memory/email-preferences.md — Required for telegram target/threadId
  • No fallback scanning of MEMORY.md, USER.md, TOOLS.md, or memory/*.md

This restricted approach prevents information leakage from sensitive files.

Cron Job

The configure-cron.py script will create/delete a cron job named email-resend-inbound via OpenClaw CLI.

Recommendations

  • Run tests with a dummy RESEND_API_KEY before enabling in production
  • If you only need outbound email, don't enable inbound/cron
  • Audit memory/email-preferences.md to ensure it contains only necessary fields
  • Keep preferences file minimal - only include required fields (target, threadId)

平台分布

OpenClaw

77.74%
按下载量换算10,005

安全审计

VirusTotal

可疑

ClawScan

通过

Static analysis

未展示

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills