OpenClaw 邮箱配置学习笔记(解决163邮箱的NO SELECT Unsafe Login问题)
> 本文是一篇实战笔记,记录了在 OpenClaw 中配置邮箱技能的全过程,包括安装、配置、踩坑和解决。
---
### 一、为什么要配置邮箱技能?
OpenClaw 本身是一个能干活儿的 AI 智能体,但默认不带收发邮件的能力。通过安装 `imap-smtp-email` 技能,可以让 OpenClaw 读取你的邮箱、自动回复、甚至根据邮件内容触发其他任务。比如:每天早上自动整理未读邮件摘要、收到特定关键词邮件后自动备份附件等。
### 二、环境说明(我的情况)
| 项目 | 配置 |
|------|------|
| 操作系统 | 阿里云ubuntu |
| 部署方式 | Docker 容器 |
| 邮箱服务商 | 163 邮箱(网易) |
如果你的环境不同(比如直接安装在本地,不是 Docker),路径会有所差异,但配置逻辑是一样的。
### 三、安装邮箱技能
#### 3.1 推荐方法:用 clawhub 一键安装
```bash
clawhub install imap-smtp-email
```
这是最简单的方式,会自动下载技能到正确位置。
#### 3.2 备选方法:手动安装
```bash
# 克隆技能仓库
git clone https://github.com/openclaw/skills.git ~/.openclaw/skills-temp
# 复制目标技能
cp -r ~/.openclaw/skills-temp/skills/gzlicanyi/imap-smtp-email ~/.openclaw/skills/
# 删除临时文件
rm -rf ~/.openclaw/skills-temp
```
#### 3.3 安装依赖
技能本身需要一些 Node.js 依赖,进入技能目录安装:
```bash
cd ~/.openclaw/workspace/skills/imap-smtp-email
npm install --production
```
---
### 四、Docker 环境下配置文件放哪里?
如果你也是 Docker 部署,会面临一个选择:`.env` 配置文件放在哪个路径?
| 方案 | 路径 | 特点 |
|------|------|------|
| 方案 A | `~/.openclaw/workspace/skills/imap-smtp-email/.env` | 全部在 Docker 卷内,备份迁移方便 |
| 方案 B | `~/.config/imap-smtp-email/.env` | 配置独立,技能更新不会覆盖 |
**我选了方案 A**,因为我的整个 `.openclaw` 目录都通过 Docker 卷映射到了宿主机,以后换机器只需复制整个目录即可,省心。
最终配置文件位置:
```bash
~/.openclaw/workspace/skills/imap-smtp-email/.env
```
---
### 五、163 邮箱配置详解(关键!)
#### 5.1 获取授权码(不是登录密码)
> ⚠️ 163 邮箱**不能用登录密码**配置 SMTP/IMAP,必须用**授权码**。
步骤:
1. 登录 https://mail.163.com
2. 点击 **设置 → POP3/SMTP/IMAP**
3. 开启 **IMAP/SMTP 服务**
4. 点击 **授权码管理** → 生成授权码(会发送到你的手机)
5. 复制保存这个授权码
#### 5.2 编写 .env 文件
在技能目录下创建 `.env` 文件,内容如下(替换成你自己的信息):
```env
# 网易163邮箱配置
# --- 接收邮件 (IMAP) ---
IMAP_HOST=imap.163.com
IMAP_PORT=993
IMAP_USER=your-email@163.com # 你的完整邮箱地址
IMAP_PASS=your-authorization-code # 填授权码,不是登录密码
IMAP_TLS=true
# --- 发送邮件 (SMTP) ---
SMTP_HOST=smtp.163.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=your-email@163.com
SMTP_PASS=your-authorization-code # 同样填授权码
```
#### 5.3 其他常见邮箱的服务器地址
| 邮箱 | IMAP 服务器 | IMAP 端口 | SMTP 服务器 | SMTP 端口 |
|------|-------------|-----------|-------------|-----------|
| 163 邮箱 | imap.163.com | 993 | smtp.163.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 |
---
### 六、踩坑记录:Unsafe Login 错误及解决方法
#### 6.1 问题现象
运行接收邮件的脚本时,报错:
```
NO SELECT Unsafe Login. Please contact kefu@188.com for help
```
#### 6.2 原因分析
163 邮箱的 IMAP 服务器要求客户端在连接时发送一个 **ID 标识**(遵循 RFC 2971 协议),但原生的 `imap` npm 包不发送这个标识,于是服务器认为是“不安全登录”,直接拒绝。
#### 6.3 解决方案
使用增强版的 `imap-mkl` 包替换原来的 `imap`,并修改脚本中的引用。
**完整修复步骤:**
```bash
# 1. 进入技能目录
cd ~/.openclaw/workspace/skills/imap-smtp-email
# 2. 安装 imap-mkl
npm install imap-mkl
# 3. 修改 imap.js,将 require('imap') 改为 require('imap-mkl')
sed -i "s/require('imap')/require('imap-mkl')/" scripts/imap.js
# 4. 重启 OpenClaw 网关(使修改生效)
openclaw gateway restart --hard
```
> 💡 手动修改的话,打开 `scripts/imap.js`,找到 `const Imap = require('imap');` 改成 `const Imap = require('imap-mkl');` 即可。
---
### 七、测试验证:看看能不能收发邮件
#### 7.1 测试发送邮件
```bash
cd ~/.openclaw/workspace/skills/imap-smtp-email
node scripts/smtp.js test
```
如果成功,你的收件箱会收到一封测试邮件。
#### 7.2 测试接收邮件(查看最近5封)
```bash
node scripts/imap.js check --limit 5
```
正常会输出邮件的主题、发件人、时间等信息。
#### 7.3 进阶测试:自己写一个简单的收发脚本
你也可以在技能目录下创建一个 `test.js`,内容如下(记得替换邮箱和授权码):
```javascript
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: 'smtp.163.com',
port: 465,
secure: true,
auth: {
user: 'your-email@163.com',
pass: 'your-authorization-code'
}
});
transporter.sendMail({
from: 'your-email@163.com',
to: 'your-email@163.com',
subject: 'Hello from OpenClaw',
text: '这是一封测试邮件,由 OpenClaw 邮箱技能发送。'
}, (err, info) => {
if (err) console.log('❌ 发送失败:', err);
else console.log('✅ 发送成功!', info.messageId);
});
```
运行 `node test.js` 即可测试。
---
### 八、总结:几条最重要的经验
1. **技能安装用 `clawhub install`**,省去手动复制和依赖安装的麻烦。
2. **163/126 等网易邮箱必须用授权码**,别拿登录密码硬填。
3. **遇到 `Unsafe Login` 错误**,就是缺 IMAP ID 标识,装 `imap-mkl` 并改一行代码即可。
4. **Docker 环境下**,把 `.env` 放在技能目录内(即 Docker 卷里),备份和迁移最方便。
5. **测试要分两步**:先测发送(SMTP),再测接收(IMAP),哪个出错就针对性排查。
---
### 九、后续可以怎么玩?
- **定时邮件摘要**:结合 OpenClaw 的 Cron 技能,每天早上 8 点自动抓取未读邮件,生成摘要发到飞书。
- **邮件自动回复**:收到特定关键词(如“请假申请”)后,自动回复并记录到日历。
- **附件自动备份**:收到带附件的邮件,自动下载到指定文件夹。
---
### 十、参考链接
- [imap-smtp-email 技能主页](https://llmbase.ai/openclaw/imap-smtp-email/)
- [ClawHub 技能市场](https://clawhub.ai/)
- [163 邮箱帮助中心](https://help.mail.163.com/)
---
*本笔记由 AI 辅助整理,基于真实踩坑经历编写,希望对你有帮助。如果有新的问题或更好的方案,欢迎交流补充。*
更多推荐



所有评论(0)