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
下载