mcpField
I
imap-smtp-email

imap-smtp-email

github.com/netease-youdao生产力6.2k444 次安装5 天前更新
代码仓库

关于 imap-smtp-email

imap-smtp-email 是面向 LobsterAI 的邮件技能,通过 IMAP 阅读、搜索和管理邮件,并通过 SMTP 发送邮件。它提供脚本处理常见邮箱操作,支持多个已配置账户及标准邮件服务器。

主要功能

  1. 01读取、搜索和获取邮件
  2. 02下载邮件附件
  3. 03将邮件标记为已读或未读
  4. 04通过 SMTP 发送邮件
  5. 05管理多个已配置账户

适用场景

  1. 01检查多个账户中的未读邮件
  2. 02按发件人或主题查找邮件
  3. 03下载邮件中的附件
  4. 04确认邮件内容后发送,可添加附件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/netease-youdao/lobsterai --skill imap-smtp-email

安装后在 Claude Code 中输入/imap-smtp-email确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

_meta.json
package.json
README.md
setup.sh
scripts/
attachment-storage.js
config.js
imap.js
smtp.js

详细介绍

IMAP/SMTP 邮件工具

通过 IMAP 协议读取、搜索和管理邮件。通过 SMTP 发送邮件。支持 Gmail、Outlook、163.com、vip.163.com、126.com、vip.126.com、188.com、vip.188.com,以及任何标准 IMAP/SMTP 服务。

重要:配置已预先设置

accounts.json 配置文件由 LobsterAI 设置(邮箱设置)自动管理。旧版 .env 配置仍可作为后备方案供旧用户使用。**不要要求用户创建或编辑这些文件——直接运行命令即可。**如果凭据有误,脚本会返回明确的错误消息;只有在此时才应告知用户检查邮箱设置。

配置文件位于此技能的目录中(与此 SKILL.md 文件处于同一文件夹)。无论当前工作目录是什么,脚本都会通过绝对路径自动加载这些文件。

仅使用提供的脚本作为邮件传输接口。不要编写临时 IMAP/SMTP 脚本,不要使用原始套接字、OpenSSL、net、tls 或其他邮件客户端;除非官方命令输出明确报告缺少配置且用户要求你进行诊断,否则不要检查 .env、accounts.json 或脚本源代码。如果官方命令失败或超时,请报告该命令的结果,并建议检查 LobsterAI 设置;不要自行实现后备协议客户端。

除非官方脚本或已验证的堆栈跟踪能够证明,否则不要声称 node-imap、nodemailer 或其他依赖存在问题。命令成功表示配置的邮箱账户可用;命令超时表示当前命令超时,并不代表依赖存在缺陷。

命令结果会有意隐藏账户元数据。在面向用户的回复中,使用 JSON 结果中已隐藏信息的账户标签/邮箱;除非用户明确要求确切地址,否则不要重复显示完整配置邮箱地址。若用户要求查看邮件内容,仍可显示发件人、主题和正文等邮件内容字段。

绝不要要求用户在聊天中发送邮件授权码、应用密码、账户密码或其他凭据。如果账户已停用、信息不完整或凭据无效,请要求用户在 LobsterAI 设置 > 邮箱设置中启用或更新账户,然后重新运行官方命令。

对于多账户配置:

  • 运行 node scripts/imap.js accounts 或 node scripts/smtp.js accounts,列出已配置的账户 ID,不会暴露机密信息。
  • 省略 --account 以使用默认的已启用账户。
  • 传入 --account <id> 以使用指定账户。
  • 仅对支持多账户处理的读取/列表命令(check、search、list-mailboxes)传入 --all-accounts。
  • 读取/列表命令的 JSON 结果包含 success、已隐藏信息的账户元数据、command、count,以及 messages 或 mailboxes 等结果数组。

发送邮件前,务必先与用户确认收件人、主题、发件账户和正文。除非传入 --confirmed,否则无法发送。

对于 SMTP 发送结果,success: true 表示发送 SMTP 服务器已接受邮件进行处理。不要声称邮件已最终送达或已进入收件箱。应报告邮件“已提交至 SMTP 服务器”,并说明收件方服务商之后仍可能通过退信拒收邮件。如果存在 rejected 或 pending 收件人,请明确指出。

绝不要将已隐藏的账户邮箱(例如 ab***@example.com)用作收件人地址。如果用户要求发送邮件到另一个已配置的邮箱账户,请使用该账户的 id 并传入 --to-account <id>,这样脚本会在内部解析真实地址,而不会将其暴露出来。

配置参考

在技能文件夹中创建 .env,或设置环境变量:

# IMAP Configuration (receiving email)
IMAP_HOST=imap.gmail.com          # Server hostname
IMAP_PORT=993                     # Server port
[email protected]
IMAP_PASS=your_password
IMAP_TLS=true                     # Use TLS/SSL connection
IMAP_REJECT_UNAUTHORIZED=true     # Set to false for self-signed certs
IMAP_MAILBOX=INBOX                # Default mailbox

# SMTP Configuration (sending email)
SMTP_HOST=smtp.gmail.com          # SMTP server hostname
SMTP_PORT=587                     # SMTP port (587 for STARTTLS, 465 for SSL)
SMTP_SECURE=false                 # true for SSL (465), false for STARTTLS (587)
[email protected]          # Your email address
SMTP_PASS=your_password           # Your password or app password
[email protected]          # Default sender email (optional)
SMTP_REJECT_UNAUTHORIZED=true     # Set to false for self-signed certs

常见邮件服务器

服务商IMAP 主机IMAP 端口SMTP 主机SMTP 端口
163.comimap.163.com993smtp.163.com465
vip.163.comimap.vip.163.com993smtp.vip.163.com465
126.comimap.126.com993smtp.126.com465
vip.126.comimap.vip.126.com993smtp.vip.126.com465
188.comimap.188.com993smtp.188.com465
vip.188.comimap.vip.188.com993smtp.vip.188.com465
yeah.netimap.yeah.net993smtp.yeah.net465
Gmailimap.gmail.com993smtp.gmail.com587
Outlookoutlook.office365.com993smtp.office365.com587
QQ 邮箱imap.qq.com993smtp.qq.com587

163.com 的重要说明:

  • 使用授权码,而不是账户密码
  • 先在网页设置中启用 IMAP/SMTP

IMAP 命令(接收邮件)

accounts

列出已配置的邮箱账户,不会暴露密码。

node scripts/imap.js accounts
check

检查新邮件/未读邮件。

node scripts/imap.js check [--limit 10] [--mailbox INBOX] [--recent 2h]
node scripts/imap.js check --all-accounts [--limit 10]

选项:

  • --account <id>:使用指定的已配置账户
  • --all-accounts:检查所有已启用的账户
  • --limit <n>:结果数量上限(默认值:10)
  • --mailbox <name>:要检查的邮箱(默认值:INBOX)
  • --recent <time>:仅显示过去 X 时间内的邮件(例如:30m、2h、7d)
fetch

通过 UID 获取完整邮件内容。

node scripts/imap.js fetch <uid> [--mailbox INBOX]
node scripts/imap.js fetch <uid> --account <id> [--mailbox INBOX]
download

下载邮件的所有附件,或指定附件。

node scripts/imap.js download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>]
node scripts/imap.js download <uid> --account <id> [--mailbox INBOX] [--dir <path>] [--file <filename>]

选项:

  • --mailbox <name>:邮箱(默认值:INBOX)
  • --dir <path>:输出目录(默认值:当前目录)
  • --file <filename>:仅下载指定附件(默认值:下载全部附件)
search

使用筛选条件搜索邮件。

node scripts/imap.js search [options]

Options:
  --unseen           Only unread messages
  --seen             Only read messages
  --from <email>     From address contains
  --subject <text>   Subject contains
  --recent <time>    From last X time (e.g., 30m, 2h, 7d)
  --since <date>     After date (YYYY-MM-DD)
  --before <date>    Before date (YYYY-MM-DD)
  --limit <n>        Max results (default: 20)
  --mailbox <name>   Mailbox to search (default: INBOX)
  --account <id>     Use a specific configured account
  --all-accounts     Search every enabled account
mark-read / mark-unread

将邮件标记为已读或未读。

node scripts/imap.js mark-read <uid> [uid2 uid3...]
node scripts/imap.js mark-unread <uid> [uid2 uid3...]
node scripts/imap.js mark-read --account <id> <uid> [uid2 uid3...]
list-mailboxes

列出所有可用邮箱/文件夹。

node scripts/imap.js list-mailboxes
node scripts/imap.js list-mailboxes --all-accounts

SMTP 命令(发送邮件)

accounts

列出已配置的邮箱账户,不会暴露密码。

node scripts/smtp.js accounts
send

通过 SMTP 提交邮件。命令成功表示 SMTP 服务器已接受邮件进行处理,并不代表邮件已送达收件人的收件箱。

node scripts/smtp.js send --to <email> --subject <text> --confirmed [options]

必需选项:

  • --to <email>:收件人(多个收件人用逗号分隔)
  • --subject <text>:邮件主题,或使用 --subject-file <file>

可选选项:

  • --body <text>:纯文本正文
  • --html:将正文作为 HTML 发送
  • --body-file <file>:从文件读取正文
  • --html-file <file>:从文件读取 HTML
  • --cc <email>:抄送收件人
  • --bcc <email>:密送收件人
  • --attach <file>:附件(多个附件用逗号分隔)
  • --from <email>:覆盖默认发件人
  • --account <id>:使用指定的已配置账户发送邮件
  • --to-account <id>:通过 ID 向已配置账户发送邮件,不会暴露其完整邮箱地址
  • --confirmed:用户确认邮件详情后必需

示例:

# Simple text email
node scripts/smtp.js send --to [email protected] --subject "Hello" --body "World"

# HTML email
node scripts/smtp.js send --to [email protected] --subject "Newsletter" --html --body "<h1>Welcome</h1>"

# Email with attachment
node scripts/smtp.js send --to [email protected] --subject "Report" --body "Please find attached" --attach report.pdf

# Multiple recipients
node scripts/smtp.js send --to "[email protected],[email protected]" --cc "[email protected]" --subject "Update" --body "Team update"

# Send to another configured account by ID
node scripts/smtp.js send --account default --to-account account-2 --subject "Hello" --body "World"
test

通过向自己发送测试邮件来测试 SMTP 连接。

node scripts/smtp.js test

依赖项

npm install

安全说明

  • 将凭据存储在 .env 中(并将其添加到 .gitignore)
  • 对于 Gmail:如果启用了双重身份验证,请使用应用专用密码
  • 对于 163.com:使用授权码,而不是账户密码
  • 下载的附件文件名会被规范化为安全的本地文件名,且无法在账户/UID 下载文件夹之外创建目录。

故障排除

连接超时:

  • 确认服务器正在运行且可以访问
  • 检查主机/端口配置

身份验证失败:

  • 确认用户名正确(通常为完整邮箱地址)
  • 检查密码是否正确
  • 对于 163.com:使用授权码,而不是账户密码
  • 对于 Gmail:如果启用了双重身份验证,请使用应用专用密码

TLS/SSL 错误:

  • 根据服务器要求设置 IMAP_TLS/SMTP_SECURE
  • 对于自签名证书:设置 IMAP_REJECT_UNAUTHORIZED=false 或 SMTP_REJECT_UNAUTHORIZED=false

评论

支持 Markdown