如果你还没有完成 OpenClaw 安装部署,可先下载 Claw龙虾部署大师。先把 OpenClaw 部署起来,再按本文完成邮箱收发配置,会更适合作为实际使用前的标准接入流程。
这篇教程解决的是一个很具体的问题:如何在 OpenClaw 里接入 163 邮箱的收件和发件能力。对 OpenClaw 来说,这件事不是在后台点一个“邮箱开关”就结束,而是分成两部分:一部分在 163 邮箱网页端开启 IMAP/SMTP 并生成授权码,另一部分是在 OpenClaw 工作区里写入 .env、放入脚本,再通过提示词或 cron 调起。
适用范围与准备项
本文以网易 163 邮箱为例,配置 OpenClaw 的收件与发件功能。邮箱端使用标准协议,OpenClaw 端使用本地脚本和环境变量完成调用。
| 项目 | 建议值 | 用途 |
|---|---|---|
| 收件协议 | IMAP 993 + SSL/TLS | 读取收件箱、同步状态 |
| 发件协议 | SMTP 465 + SSL/TLS | 发送测试邮件、通知邮件 |
| 登录凭证 | 163 授权码 | 同时用于 IMAP 和 SMTP |
| OpenClaw 运行方式 | 工作区脚本 + .env + prompt 或 cron | 让 Agent 可调用邮箱收发能力 |
第一步:登录 163 邮箱网页端
先打开 163 邮箱网页端并登录要接入 OpenClaw 的邮箱帐号。后续的 IMAP/SMTP 开关和授权码,都需要在网页端完成。

第二步:进入 POP3/SMTP/IMAP 设置页
进入邮箱主页后,在顶部菜单点击“设置”,再进入“POP3/SMTP/IMAP”。对于 OpenClaw 的邮箱收发配置,这一步是整个接入流程的起点。

第三步:开启 IMAP/SMTP 并完成验证
如果你的目标是在 OpenClaw 中读取邮件并发送邮件,优先开启 IMAP/SMTP。这组服务分别负责收件和发件,是本文的主路径。开启过程中如果出现安全提示或手机验证,按页面提示完成即可。
如果你还有兼容旧客户端的需求,可以额外开启 POP3/SMTP;但对 OpenClaw 的自动化收发来说,优先跑通 IMAP/SMTP 即可。
第四步:生成并保存 163 授权码
163 邮箱网页密码不适合直接放进 OpenClaw 工作区脚本。更稳妥的做法,是在协议设置页下方进入授权码管理,生成一枚新的授权码,并把它写入 .env。

这里最容易出错的地方只有一个:把网页登录密码当成脚本密码。163 邮箱在第三方客户端接入场景下,应优先使用授权码,而不是网页密码。
第五步:核对 IMAP 和 SMTP 服务器地址
OpenClaw 配置邮箱收发时,收件和发件不是同一个地址。收件通常使用 IMAP,发件通常使用 SMTP。
| 用途 | 服务器地址 | 端口 | 加密 |
|---|---|---|---|
| 收件 | imap.163.com | 993 | SSL/TLS |
| 发件 | smtp.163.com | 465 | SSL/TLS |
在 OpenClaw 端,授权码通常同时用于 IMAP 和 SMTP 登录。因此你只需要生成一枚新的授权码,并保证它没有被写错、复制错或过期失效。
第六步:在 OpenClaw 工作区写入邮箱参数
邮箱网页端配置完成后,就可以进入 OpenClaw 工作区。这里不建议把参数零散写进多个文件,第一版直接统一放到当前工作目录的 .env 里会更稳。
your-openclaw-workspace/
.env
scripts/
check_163_inbox.py
send_163_mail.py
建议先按下面这份 .env 模板填写。这里把收件和发件参数放到同一套环境变量里,后面 OpenClaw 调用脚本时更省事。
MAIL_IMAP_HOST=imap.163.com
MAIL_IMAP_PORT=993
MAIL_SMTP_HOST=smtp.163.com
MAIL_SMTP_PORT=465
MAIL_USER=your_name@163.com
MAIL_PASSWORD=replace_with_authorization_code
MAIL_FOLDER=INBOX
MAIL_FETCH_LIMIT=10
MAIL_FROM=your_name@163.com
MAIL_TO=your_other_mail@example.com
OpenClaw 官方环境变量文档说明,当前工作目录中的 .env 会参与变量加载。这意味着你把邮箱参数写在工作区 .env 里之后,后续脚本和 Agent 调用都更容易复用。
第七步:放入收件脚本
收件脚本建议先做到两件事:一是能连上 163 IMAP,二是能输出结构化 JSON。这样 OpenClaw 后面无论是做摘要、分类还是晨报,都会更容易处理。
from dotenv import load_dotenv
import email
import imaplib
import json
import os
from email.header import decode_header
def decode_mime_words(value: str) -> str:
if not value:
return ""
parts = decode_header(value)
decoded = []
for text, encoding in parts:
if isinstance(text, bytes):
decoded.append(text.decode(encoding or "utf-8", errors="replace"))
else:
decoded.append(text)
return "".join(decoded)
def main() -> None:
load_dotenv()
host = os.getenv("MAIL_IMAP_HOST", "imap.163.com")
port = int(os.getenv("MAIL_IMAP_PORT", "993"))
user = os.environ["MAIL_USER"]
password = os.environ["MAIL_PASSWORD"]
folder = os.getenv("MAIL_FOLDER", "INBOX")
limit = int(os.getenv("MAIL_FETCH_LIMIT", "10"))
mail = imaplib.IMAP4_SSL(host, port)
mail.login(user, password)
mail.select(folder)
status, data = mail.search(None, "ALL")
if status != "OK":
raise RuntimeError("failed to search mailbox")
all_ids = data[0].split()
target_ids = all_ids[-limit:]
items = []
for mail_id in reversed(target_ids):
status, msg_data = mail.fetch(mail_id, "(RFC822)")
if status != "OK":
continue
raw = msg_data[0][1]
message = email.message_from_bytes(raw)
items.append(
{
"message_id": mail_id.decode(),
"subject": decode_mime_words(message.get("Subject", "")),
"from": decode_mime_words(message.get("From", "")),
"date": message.get("Date", ""),
}
)
mail.close()
mail.logout()
print(
json.dumps(
{
"host": host,
"port": port,
"user": user,
"mailbox": {
"folder": folder,
"total_messages": len(all_ids),
"fetched_items": items,
},
"result": "success",
},
ensure_ascii=False,
indent=2,
)
)
if __name__ == "__main__":
main()
这段脚本完成后,可以先手动运行一次验证链路。只要返回 result = success,并能看到最近邮件的主题、发件人和时间,说明收件端已经跑通。
pip install python-dotenv
python scripts/check_163_inbox.py
# 或者
uv run --with python-dotenv scripts/check_163_inbox.py
第八步:放入发件脚本
如果你的目标不只是“读邮件”,而是让 OpenClaw 还能主动发提醒、发测试邮件或发汇总邮件,就需要再放一份 SMTP 发件脚本。
from dotenv import load_dotenv
import argparse
import os
import smtplib
import ssl
from email.message import EmailMessage
def main() -> None:
load_dotenv()
parser = argparse.ArgumentParser()
parser.add_argument("--to", required=False, default=os.getenv("MAIL_TO", ""))
parser.add_argument("--subject", required=True)
parser.add_argument("--body", required=True)
args = parser.parse_args()
host = os.getenv("MAIL_SMTP_HOST", "smtp.163.com")
port = int(os.getenv("MAIL_SMTP_PORT", "465"))
user = os.environ["MAIL_USER"]
password = os.environ["MAIL_PASSWORD"]
sender = os.getenv("MAIL_FROM", user)
if not args.to:
raise ValueError("missing recipient: use --to or MAIL_TO")
msg = EmailMessage()
msg["From"] = sender
msg["To"] = args.to
msg["Subject"] = args.subject
msg.set_content(args.body)
context = ssl.create_default_context()
with smtplib.SMTP_SSL(host, port, context=context) as server:
server.login(user, password)
server.send_message(msg)
print("result=success")
print(f"to={args.to}")
print(f"subject={args.subject}")
if __name__ == "__main__":
main()
建议先给自己的另一个邮箱发一封测试邮件,确认 SMTP 登录、发件人地址和收件人地址都没有问题。
pip install python-dotenv
python scripts/send_163_mail.py --to your_other_mail@example.com --subject "OpenClaw 邮箱发信测试" --body "这是一封由 OpenClaw 调用 SMTP 脚本发出的测试邮件。"
# 或者
uv run --with python-dotenv scripts/send_163_mail.py --to your_other_mail@example.com --subject "OpenClaw 邮箱发信测试" --body "这是一封由 OpenClaw 调用 SMTP 脚本发出的测试邮件。"
第九步:让 OpenClaw 调用邮箱脚本
OpenClaw 端最稳的做法,不是先把脚本封成复杂技能,而是先让 Agent 直接在当前工作目录里调用脚本。这样最容易验证收件、发件和摘要链路是否真的可用。
收件测试提示词可以直接这样写:
运行 scripts/check_163_inbox.py
读取 JSON 输出
按四类整理最近邮件:
1. 需要处理
2. 安全提醒
3. 系统通知
4. 可忽略邮件
发件测试提示词可以直接这样写:
运行 scripts/send_163_mail.py
收件人使用 MAIL_TO
主题:OpenClaw 邮箱发信测试
正文:这是一封 SMTP 测试邮件
对于第一次接邮箱的用户,建议遵循这个顺序:先跑收件脚本,再跑发件脚本,最后再叠加分类、摘要和定时任务。这样排错成本最低。
第十步:给 OpenClaw 增加邮件晨报任务
如果你希望 OpenClaw 每天定时汇总邮箱内容,可以直接用 Gateway 自带的 cron。当前官方文档推荐使用 openclaw cron add 配置周期任务。
openclaw cron add \
--name "163 邮箱晨报" \
--cron "0 9 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "运行 scripts/check_163_inbox.py,汇总昨天邮件。" \
--announce
openclaw cron list
如果你在 Windows 上通过 WSL2 运行 OpenClaw,官方文档也明确建议把 Gateway 作为用户服务安装并启动,再去执行 cron 相关命令:
openclaw gateway install
systemctl --user enable --now openclaw-gateway.service
openclaw gateway status
也就是说,邮箱协议本身与 WSL 没有强绑定,但如果你后面要用 OpenClaw 的 cron、Gateway 或长期任务,WSL2 的 Gateway 服务状态就必须先正常。
常见问题
OpenClaw 能不能直接读取 163 邮箱,不写脚本行不行
第一版不建议这样做。对大部分用户来说,更稳的路径是:163 网页端开 IMAP/SMTP,OpenClaw 工作区放脚本和 .env,再让 Agent 调脚本。这样职责更清晰,后面也更容易排查。
为什么收件能成功,发件却失败
优先检查四项:SMTP 地址是否写成 smtp.163.com、端口是否写成 465、是否使用 SSL/TLS,以及密码是不是 163 授权码而不是网页密码。
为什么 OpenClaw 里读不到 .env
优先检查脚本所在目录是不是当前工作目录;其次确认 Gateway 当前运行实例对应的工作区是否正确;最后再检查 .env 文件名、变量名和权限是否写对。
163 授权码能不能重复给多个脚本使用
可以,但不建议这么做。更稳妥的方式是把 OpenClaw 这条接入链路单独使用一枚新的授权码,后续排查、重置和权限收缩都会更清楚。
总结
在 OpenClaw 里配置 163 邮箱收发,最稳的路径可以拆成三步:先在 163 网页端开启 IMAP/SMTP 并生成授权码,再在 OpenClaw 工作区写入 .env 和收发脚本,最后再用提示词或 cron 调起。这样做既能完成第一版收件和发件,也方便后面继续扩展成邮件摘要、自动提醒和定时汇总。
如果你希望先把 OpenClaw 更快部署起来,再回头接入邮箱功能,可先下载 Claw龙虾部署大师。先完成 OpenClaw 部署,再按本文配置 163 邮箱收发,会比把部署和邮箱接入混在一起更容易落地。


提示