邮件管理器

Polar Sponsor
爱发电 赞助
.NET 9.0

收发和管理邮件,支持查看未读邮件、搜索邮件、下载附件、发送带附件的邮件,并提供交互式配置向导。兼容Gmail、Outlook、163.com、126.com、QQ邮箱等主流服务商。当用户需要收发邮件、查看收件箱、搜索特定邮件、管理附件,或提及配置邮箱时触发。

📦 通过 SkillHub 安装(推荐)

功能概述

📦 通过 SkillHub 安装(推荐):是一项面向实际任务的技能,主要用于安装后需重启 Gateway: openclaw gateway restart;🎯 触发方式(说什么能唤醒这个技能);

核心要点

  • 以下任一说法都能触发:;
  • "帮我查一下邮箱" / "看看有没有新邮件" / "查收件箱" / "收一下邮件";
  • "发一封邮件给 xxx" / "发送邮件" / "发邮件" / "发个通知";

使用与执行

"搜索一下 xxx 的邮件" /。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

📦 安装

📦 通过 SkillHub 安装(推荐):

skillhub install mail-agent-goose --dir ~/.openclaw/workspace/skills/

安装后需重启 Gateway:openclaw gateway restart

🎯 触发方式(说什么能唤醒这个技能)

以下任一说法都能触发:

"帮我查一下邮箱" / "看看有没有新邮件" / "查收件箱" / "收一下邮件" "发一封邮件给 xxx" / "发送邮件" / "发邮件" / "发个通知" "搜索一下 xxx 的邮件" / "找一下xxx发来的邮件" "下载邮件附件" / "把邮件里的文件下载下来" "配置邮箱" / "设置邮箱" / "我的邮箱怎么配置"

⚡ 快速开始

第一步:配置邮箱

cd ~/.openclaw/workspace/mail-agent-goose
bash setup.sh

交互式向导会引导你选择邮箱类型(Gmail/163/QQ 等),输入账号密码,自动生成 .env 文件。

或手动创建 .env:

# Gmail 示例
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
IMAP_USER=your@gmail.com
IMAP_PASS=your_app_password
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your@gmail.com
SMTP_PASS=your_app_password
SMTP_FROM=your@gmail.com

⚠️ Gmail:不支持普通密码,必须用 App Password(16位)。开启两步验证后到这里生成:https://myaccount.google.com/apppasswords ⚠️ 163/126/QQ:用邮箱授权码,不是登录密码

第二步:试试收发

# 查看最近 5 封邮件
node imap.js check --limit 5

# 发一封测试邮件
node smtp.js test

⚠️ 能力边界(它做不到的事)

  • ❌ 不支持网页登录:必须开启邮箱的 IMAP/SMTP 功能
  • ❌ 不支持发送后删除:只能发送,不能删除对方收件箱里的邮件
  • ❌ 不支持定时发送:立即发送,不支持预约
  • ❌ 附件无大小保证:各服务商有限制(Gmail 25MB、163 50MB),附件过大会发送失败
  • ❌ 不支持批量个性化群发:可以群发,但不能像邮件营销工具那样每个收件人显示不同名字

📋 命令速查

收邮件

需求 命令 示例
查看最近邮件 node imap.js check node imap.js check --limit 10
只看未读邮件 node imap.js check --unseen node imap.js check --limit 20
最近 2 小时的新邮件 node imap.js check --recent 2h node imap.js check --recent 2h
查看邮件正文 node imap.js fetch node imap.js fetch 1234
搜索邮件 node imap.js search --from xxx node imap.js search --subject 订单
列出所有文件夹 node imap.js list-mailboxes —

发邮件

需求 命令 示例
发文本邮件 node smtp.js send --to x --subject x --body x node smtp.js send --to a@b.com --subject "你好" --body "内容"
发 HTML 邮件 node smtp.js send --html --body "

标题

"
用 --html 标志
发带附件 --attach 文件 --attach report.pdf
发给多人 --to "a@b.com,b@c.com" 逗号分隔

管理邮件

需求 命令 示例
下载附件 node imap.js download node imap.js download 1234
下载到指定目录 --dir ~/Downloads node imap.js download 1234 --dir ~/Downloads
只下某个文件 --file 文件名 node imap.js download 1234 --file report.pdf
标记已读 node imap.js mark-read node imap.js mark-read 1234 1235

📤 输出示例

node imap.js check --limit 3

[
  {
    "uid": 1234,
    "from": "zhangsan@example.com",
    "to": "me@example.com",
    "subject": "项目进度汇报",
    "date": "2026-07-14T09:30:00.000Z",
    "snippet": "各位好,本周进度如下:1. 前端页面已完成;2. 接口开发..."
  },
  {
    "uid": 1233,
    "from": "noreply@taobao.com",
    "to": "me@163.com",
    "subject": "【淘宝】您的订单已发货",
    "date": "2026-07-14T08:15:00.000Z",
    "snippet": "亲爱的用户,您的订单 #28475931 已发货,预计 3-5 天送达..."
  }
]

node imap.js fetch 1234

{
  "uid": 1234,
  "from": "zhangsan@example.com",
  "to": "me@example.com",
  "subject": "项目进度汇报",
  "date": "2026-07-14T09:30:00.000Z",
  "text": "各位好,本周进度如下:n1. 前端页面已完成n2. 接口开发完成 80%n请查收。",
  "html": "

各位好,本周进度如下:

  1. 前端页面已完成
  2. 接口开发完成80%
", "attachments": [ { "filename": "进度报告.pdf", "contentType": "application/pdf", "size": 204800 } ] }

node smtp.js send --to a@b.com --subject "测试" --body "你好"

{
  "success": true,
  "messageId": "",
  "response": "250 OK",
  "to": "a@b.com"
}

node smtp.js test

{
  "success": true,
  "message": "SMTP connection successful",
  "messageId": ""
}

🛠 完整命令参考

IMAP 命令

# 检查新邮件(默认 10 封,最新在前)
node imap.js check [--limit 10] [--mailbox INBOX] [--recent 2h] [--unseen]

# 根据 UID 获取邮件完整内容
node imap.js fetch  [--mailbox INBOX]

# 下载附件(全部或指定文件)
node imap.js download  [--mailbox INBOX] [--dir ] [--file ]

# 搜索邮件
node imap.js search [options]
  --unseen           仅未读
  --seen             仅已读
  --from      发件人包含
  --subject    主题包含
  --recent 

SMTP 命令

# 发送邮件
node smtp.js send --to  --subject  [options]

  必填:
    --to               收件人(多个逗号分隔)
    --subject           主题

  可选:
    --body              纯文本正文
    --html                    正文是 HTML(配合 --body 使用)
    --body-file         从文件读取正文
    --html-file         从 HTML 文件读取内容
    --cc               抄送
    --bcc              密送
    --attach            附件(多个逗号分隔)
    --from             覆盖默认发件人

# 测试连接(给自己发一封测试邮件)
node smtp.js test

常用邮件服务器

服务商 IMAP 主机 IMAP 端口 SMTP 主机 SMTP 端口
163.com imap.163.com 993 smtp.163.com 465
vip.163.com imap.vip.163.com 993 smtp.vip.163.com 465
126.com imap.126.com 993 smtp.126.com 465
QQ 邮箱 imap.qq.com 993 smtp.qq.com 587
Gmail imap.gmail.com 993 smtp.gmail.com 587
Outlook outlook.office365.com 993 smtp.office365.com 587

❓ 常见问题(FAQ)

连接与认证类

Q1: 报"连接超时"(ETIMEDOUT/ECONNREFUSED)

可能原因:IMAP/SMTP 服务器地址错误、端口错误、网络不通、服务器维护

排查步骤:

  1. 确认 .env 中的 IMAP_HOST / SMTP_HOST 地址正确(参考上方服务器表格)
  2. 测试网络连通性:telnet imap.qq.com 993 或 curl -v telnet://imap.gmail.com:993
  3. 确认邮箱服务商的 IMAP/SMTP 功能已在网页端开启
  4. 163/QQ 等国内邮箱有时需要等待 5-10 分钟才能激活服务
  5. 若公司/校园网限制外网 IMAP 端口,换用手机热点尝试

Q2: 报"认证失败"(Authentication failed/INVALID_CREDENTIALS)

可能原因:密码类型错误、授权码过期、账号拼写错误

Gmail 必做:

  1. Gmail 不支持普通密码,必须用 App Password(16位)
  2. 去 https://myaccount.google.com/apppasswords 生成(需先开启两步验证)
  3. 如果没有"生成App Password"选项 → 先去 https://myaccount.google.com/security 开启两步验证
  4. 用生成的 App Password 替换 .env 中的 IMAP_PASS 和 SMTP_PASS

163/126/QQ 必做:

  1. 登录网页邮箱 → 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP
  2. 使用授权码而非登录密码(不是 QQ 登录密码!)
  3. 授权码可在邮箱设置页面重新生成
  4. 确认 IMAP_USER 填写的是完整邮箱地址(如 123456@qq.com,不是纯数字 QQ 号)

Q3: 163 邮箱报"IMAP ID failed"警告

这是正常现象(服务器不支持 IMAP ID 扩展),不影响使用,脚本会自动跳过继续执行。

Q4: Gmail 报"请用 App Password"但我明明用了 App Password

  1. 确认 App Password 填写正确(16位,无空格)
  2. App Password 生成后只能看一次,如丢失需重新生成
  3. 确认 IMAP_USER 是 Gmail 地址格式(如 xxx@gmail.com)
  4. 如最近更改了 Google 账号密码,需重新生成 App Password

邮件收发类

Q5: 查邮件成功但返回空列表

  1. 确认 IMAP/SMTP 已开启:登录邮箱网页 → 设置 → 查看是否已启用 IMAP
  2. 检查是否在正确的文件夹(默认是 INBOX),其他文件夹用 --mailbox 文件夹名
  3. Gmail:Settings → See all settings → Forwarding and POP/IMAP → IMAP Access → Enable

Q6: 附件下载失败(ALLOWED_WRITE_DIRS)

  1. 在 .env 中添加允许写入的目录:ALLOWED_WRITE_DIRS=~/Downloads
  2. 多个目录用逗号分隔:ALLOWED_WRITE_DIRS=~/Downloads,~/Documents
  3. 指定下载目录:node imap.js download 1234 --dir ~/Downloads
  4. 确认目录存在且有写入权限

Q7: 发邮件报"附件太大"

各服务商单封邮件附件限制:

  • Gmail:25MB
  • 163/126:50MB
  • QQ 邮箱:50MB

解决方案:压缩大文件(PDF/图片用压缩工具),或改用网盘分享链接

Q8: 发送成功但收件人没收到

  1. 检查收件人地址是否正确
  2. 查看发件箱确认发送记录
  3. 检查垃圾邮件文件夹
  4. Gmail 可能因 SPF/DKIM 未配置被对方服务器拒收
  5. 163/QQ 可能拦截非发件人本人账号的邮件,发送地址需与 SMTP_USER 一致

配置与工具类

Q9: 163/QQ 邮件收不到或发不出去

  1. 确认已在邮箱网页端开启 IMAP/SMTP 服务
  2. 用授权码(非登录密码)填入 IMAP_PASS 和 SMTP_PASS
  3. 163 邮箱发送需确保发件人与登录账号一致
  4. 首次开启服务后需等待 5-30 分钟生效

Q10: 命令行参数写错了没提示

感谢反馈!当前版本的参数校验已在优化中。传错参数时会直接透传给底层 CLI,请参考上方「命令速查」表格确保参数正确。

Q11: 网络波动后命令直接失败,能否自动重试?

未来版本将加入自动重试机制。当前请手动重试命令,或检查网络环境后再次执行。

🔗 关联技能

本技能可与以下技能联动使用:

🎨 html-mail-goose(邮件模板生成)

用 html-mail-goose 生成 HTML 邮件模板后,直接用 mail-agent 发送:

# 1. 生成模板
python html-mail-goose/generate_email_template.py --input welcome.json --output welcome.html

# 2. 发送 HTML 邮件
node mail-agent-goose/smtp.js send --to user@example.com 
  --subject "欢迎加入 MyCompany" 
  --html-file ./welcome.html

html-mail-goose 安装:

skillhub install html-mail-goose --dir ~/.openclaw/workspace/skills/

🌐 goosehost(静态网站托管)

把文件部署到 GooseHost,在邮件里附上预览链接:

# 1. 部署
goosehost deploy ./report.html --slug 月度报告

# 2. 发邮件附链接
node mail-agent-goose/smtp.js send 
  --to user@example.com 
  --subject "你的月度报告" 
  --body "报告已生成:https://page.goose.cc.cd/s/月度报告"

goosehost 安装:

skillhub install goosehost --dir ~/.openclaw/workspace/skills/
openclaw gateway restart

相关专题

更多
Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

2026.11.03

0

11

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

2026.11.03

0

11

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习