imap-smtp-email
通过 IMAP/SMTP 协议收发邮件的完整工具。支持 Gmail、Outlook、网易(163/vip.163/126/vip.126/188/vip.188)、QQ 等主流邮箱,可配置多账户。
IMAP 邮件收发管理 + SMTP 邮件发送
基于标准 IMAP/SMTP 协议,提供命令行式邮件操作能力。支持多账户配置、文件访问白名单控制,兼容 Gmail、Outlook、网易系列、QQ 等主流邮箱及任何标准 IMAP/SMTP 服务器。
自定义模式(手动指定服务器):
PROVIDER=custom
USERNAME=your@email.com
PASSWORD=your_password
IMAP_HOST=imap.example.com
SMTP_HOST=smtp.example.com
文件访问白名单(安全):
ALLOWED_READ_DIRS=~/Downloads,~/Documents
ALLOWED_WRITE_DIRS=~/Downloads
多账户支持
在同一配置文件中通过前缀区分多个账户:
# 默认账户(无前缀)
PROVIDER=163
USERNAME=personal@163.com
PASSWORD=xxx
# 工作账户(WORK_ 前缀)
WORK_PROVIDER=gmail
WORK_USERNAME=me@company.com
WORK_PASSWORD=app_password
使用 --account <name> 指定账户:
node scripts/imap.js --account work check
node scripts/smtp.js --account work send --to foo@bar.com --subject Hi --body Hello
支持的主流邮箱
| Provider | IMAP Host | IMAP Port | SMTP Host | SMTP Port |
|---|---|---|---|---|
| 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 |
| vip.126.com | imap.vip.126.com | 993 | smtp.vip.126.com | 465 |
| 188.com | imap.188.com | 993 | smtp.188.com | 465 |
| vip.188.com | imap.vip.188.com | 993 | smtp.vip.188.com | 465 |
| yeah.net | imap.yeah.net | 993 | smtp.yeah.net | 465 |
| Gmail | imap.gmail.com | 993 | smtp.gmail.com | 587 |
| Outlook | outlook.office365.com | 993 | smtp.office365.com | 587 |
| QQ Mail | imap.qq.com | 993 | smtp.qq.com | 587 |
| exmail.qq.com | imap.exmail.qq.com | 993 | smtp.exmail.qq.com | 465 |
特殊要求:
- Gmail:不接受常规密码,需生成 16 位 App Password(2-Step Verification)
- 163.com 系列:使用授权码(授权码)而非账户密码,需先在网页设置中开启 IMAP/SMTP
IMAP 命令(接收/管理邮件)
check — 检查新邮件/未读邮件
node scripts/imap.js [--account <name>] check [--limit 10] [--mailbox INBOX] [--recent 2h] [--unseen]
--limit <n>:最大结果数(默认 10)--mailbox <name>:目标邮箱(默认 INBOX)--recent <time>:仅显示最近 X 时间的邮件(如 30m, 2h, 7d)--unseen:仅显示未读邮件
fetch — 获取邮件全文
node scripts/imap.js [--account <name>] fetch <uid> [--mailbox INBOX]
download — 下载附件
node scripts/imap.js [--account <name>] download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>]
--dir <path>:输出目录(默认当前目录)--file <filename>:仅下载指定附件(默认下载全部)
search — 搜索邮件
node scripts/imap.js [--account <name>] search [options]
选项:
--unseen:仅未读--seen:仅已读--from <email>:发件人包含--subject <text>:主题包含--recent <time>:最近 X 时间--since <date>:指定日期之后(YYYY-MM-DD)--before <date>:指定日期之前(YYYY-MM-DD)--limit <n>:最大结果数(默认 20)--mailbox <name>:目标邮箱(默认 INBOX)--sort <mode>:排序方式 —uid(默认,快速)或date(严格按 INTERNALDATE)
mark-read / mark-unread — 标记已读/未读
node scripts/imap.js [--account <name>] mark-read <uid> [uid2 uid3...]
node scripts/imap.js [--account <name>] mark-unread <uid> [uid2 uid3...]
list-mailboxes — 列出所有邮箱/文件夹
node scripts/imap.js [--account <name>] list-mailboxes
list-accounts — 列出所有配置账户
node scripts/imap.js list-accounts
node scripts/smtp.js list-accounts
SMTP 命令(发送邮件)
send — 发送邮件
node scripts/smtp.js [--account <name>] send --to <email> --subject <text> [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>:覆盖默认发件人
发送示例:
# 简单文本邮件
node scripts/smtp.js send --to recipient@example.com --subject "Hello" --body "World"
# HTML 邮件
node scripts/smtp.js send --to recipient@example.com --subject "Newsletter" --html --body "<h1>Welcome</h1>"
# 带附件
node scripts/smtp.js send --to recipient@example.com --subject "Report" --body "Please find attached" --attach report.pdf
# 多收件人 + 抄送
node scripts/smtp.js send --to "a@example.com,b@example.com" --cc "c@example.com" --subject "Update" --body "Team update"
v0.0.17
2026-07-15
下载