使用 Resend 为代理设置专用邮箱,配置发送、通过 webhook 接收、收件箱存储及自动化监控。适用于以下情况:(1)...
代理电子邮件设置
功能概述
代理电子邮件设置是一项面向实际任务的技能,主要用于给代理发送和接收的电子邮件地址—— 核查代码、通知、账户登记和自动收件箱监测;Prerequists.;
核心要点
- A verif。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
使用与执行
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
Agent 邮箱配置
为 Agent 分配独立邮箱地址,用于收发邮件——包括验证码、通知、账号注册以及自主邮箱收件箱监控。
前置条件
- 已在 Resend 上完成域名验证(或具备验证能力)
- 已运行 Express/Node.js 后端服务(用于接收 Webhook)
- 拥有具备完整权限的 Resend API Key(非仅限发送权限)
- 服务器上已安装
curl、jq和node
架构设计
外部发件人
↓
[Resend 入站邮件]
↓ (Webhook 事件:email.received)
[Express /api/inbound-email]
↓ (以 JSON 格式保存)
[mail/inbox/]
↓ (定时任务:每 5 分钟执行一次)
[Agent 读取并处理]
↓
[Agent 响应或执行动作]
步骤 1:在 Resend 上验证域名
若该域名尚未验证,请执行以下操作:
RESEND_KEY="re_xxxxx"
# 添加域名
curl -s -X POST -H "Authorization: Bearer $RESEND_KEY"
-H "Content-Type: application/json"
https://api.resend.com/domains
-d '{"name": "yourdomain.com", "region": "us-east-1"}'
# 获取需配置的 DNS 记录
curl -s -H "Authorization: Bearer $RESEND_KEY"
https://api.resend.com/domains/yourdomain.com | jq '.records'
将返回的 DNS 记录(TXT、MX、CNAME)添加至您的 DNS 提供商控制台。等待验证完成(通常需数分钟)。
验证状态:
curl -s -H "Authorization: Bearer $RESEND_KEY"
https://api.resend.com/domains/yourdomain.com | jq '{status, capabilities}'
sending 与 receiving 两项能力均须显示为 "enabled"。
步骤 2:创建 Webhook 接收端点
在 Express 后端中创建 routes/inboundEmail.js(完整实现参考 references/inboundEmail.js)。关键要求如下:
- 支持对
/api/inbound-email的 POST 请求 - 使用
RESEND_WEBHOOK_SECRET验证 Resend Webhook 签名 - 将接收到的邮件以 JSON 格式保存至
mail/inbox/ - 提供 GET 接口用于列出或读取邮件
- 提供 ACK 接口用于标记邮件为已处理
在服务端挂载该路由:
const inboundEmailRoutes = require('./routes/inboundEmail');
app.use('/api/inbound-email', inboundEmailRoutes);
步骤 3:在 Resend 上注册 Webhook
curl -s -X POST -H "Authorization: Bearer $RESEND_KEY"
-H "Content-Type: application/json"
https://api.resend.com/webhooks
-d '{
"endpoint": "https://yourdomain.com/api/inbound-email",
"events": ["email.received"],
"enabled": true
}' | jq '{id, signing_secret}'
请妥善保存返回的 signing_secret —— 后续 Webhook 签名验证将用到它。
步骤 4:存储密钥信息
将以下配置项加入您的密钥管理系统:
{
"RESEND_API_KEY": "re_xxxxx",
"RESEND_WEBHOOK_SECRET": "whsec_xxxxx",
"AGENT_EMAIL": "agent@yourdomain.com"
}
步骤 5:创建收件箱目录
mkdir -p mail/inbox touch mail/inbox/.lastcheck
步骤 6:配置收件箱监控定时任务
设置一个每 5 分钟运行一次的 cron 任务,用于检查新邮件并通知 Agent:
每 5 分钟 → 检查 mail/inbox/ 下是否存在新的 .json 文件 → 若发现新邮件:读取、摘要,并向所有者报告 → 将已处理邮件重命名为带 .processed 后缀的文件
步骤 7:端到端测试
发送测试邮件:
curl -s -X POST -H "Authorization: Bearer $RESEND_KEY"
-H "Content-Type: application/json"
https://api.resend.com/emails
-d '{
"from": "Agent ",
"to": ["owner@theirdomain.com"],
"subject": "Email system test",
"text": "This is a test from my new email address."
}'
验证接收功能:
curl -s https://yourdomain.com/api/inbound-email | jq .
验证收件箱目录:
ls -la mail/inbox/
从 Agent 代码中发送邮件
async function sendEmail(to, subject, text, html) {
const res = await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: {
'Authorization': `Bearer ${RESEND_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
from: 'Agent ',
to: [to],
subject,
text,
...(html && { html }),
}),
});
return res.json();
}
从 Agent 代码中读取收件箱
async function getInbox() {
const res = await fetch('http://localhost:PORT/api/inbound-email');
const data = await res.json();
return data.emails;
}
async function getEmail(id) {
const res = await fetch(`http://localhost:PORT/api/inbound-email/${id}`);
return res.json();
}
async function ackEmail(id) {
await fetch(`http://localhost:PORT/api/inbound-email/${id}/ack`, { method: 'POST' });
}
Webhook 签名验证
Resend 使用 HMAC-SHA256 对 Webhook 进行签名。务必验证签名以防止伪造请求:
const crypto = require('crypto');
function verifySignature(rawBody, signature, secret) {
try {
const [timestamp, hash] = signature.split(',').map(s => s.trim());
if (!timestamp || !hash) return false;
const signedPayload = `${timestamp}.${rawBody}`;
const expected = crypto.createHmac('sha256', secret)
.update(signedPayload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(hash), Buffer.from(expected));
} catch {
return false;
}
}
安全注意事项
- 切勿在聊天记录或日志中暴露
RESEND_API_KEY或RESEND_WEBHOOK_SECRET - 生产环境中必须始终验证 Webhook 签名
- Webhook 端点必须使用 HTTPS(Resend 强制要求)
- Webhook 密钥应通过密钥管理系统管理,禁止硬编码
- 收件箱文件应存放于服务器文件系统内,不可对外公开访问
故障排查
| 问题 | 解决方案 |
|---|---|
| 域名无法通过验证 | 检查 DNS 记录是否已生效(执行 dig TXT yourdomain.com) |
| Webhook 未触发 | 确认 Webhook 已启用(enabled),且端点地址使用 HTTPS |
| 签名校验失败 | 确保使用原始请求体(raw body),而非解析后的 JSON 对象 |
| 邮件未送达 | 检查域名的 receiving 能力是否已启用(enabled) |
| 后端未接收到请求 | 确认 Express 路由挂载顺序早于 body 解析中间件(如 express.json()) |
热门AI工具
相关专题
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习