Skip to content

文档同步

本页由 plugins/adapters/email/README.md 自动生成。请修改包内 README 后运行 pnpm sync:adapter-docs

@zhin.js/adapter-email

Zhin.js 邮件适配器,通过 SMTP 发送和 IMAP 接收邮件,将邮箱作为聊天平台接入。

功能特性

  • SMTP 邮件发送(基于 nodemailer)
  • IMAP 邮件接收(基于 imap + mailparser)
  • 支持附件处理
  • 定时轮询新邮件
  • TLS/SSL 加密连接

安装

bash
pnpm add @zhin.js/adapter-email

前置条件

要求说明
邮箱账号可用的 SMTP 发信与 IMAP 收信账号(或同一邮箱双协议)
应用专用密码Gmail、Outlook 等常需开启「第三方应用访问」或生成应用密码
网络出站可连 SMTP/IMAP 端口(465/587/993 等)
host-router不需要;IMAP 轮询在适配器内完成

必填字段见 EmailBotConfigcontextnamesmtpimap(含 auth.user / auth.passuser / password)。

最小配置

yaml
plugins:
  - "@zhin.js/adapter-email"

bots:
  - context: email
    name: my-email-bot
    smtp:
      host: smtp.example.com
      port: 465
      secure: true
      auth:
        user: bot@example.com
        pass: "${EMAIL_PASSWORD}"
    imap:
      host: imap.example.com
      port: 993
      tls: true
      user: bot@example.com
      password: "${EMAIL_PASSWORD}"

配置

可选 IMAP 字段

yaml
    imap:
      host: imap.example.com
      port: 993
      tls: true
      user: bot@example.com
      password: "${EMAIL_PASSWORD}"
      # checkInterval: 30000     # 轮询间隔(毫秒),默认 30 秒
      # mailbox: INBOX           # 监听的邮箱文件夹
      # markSeen: true           # 已读标记

TypeScript 配置

typescript
import { defineConfig } from 'zhin.js'

export default defineConfig({
  bots: [
    {
      context: 'email',
      name: 'my-email-bot',
      smtp: {
        host: 'smtp.example.com',
        port: 465,
        secure: true,
        auth: {
          user: 'bot@example.com',
          pass: process.env.EMAIL_PASSWORD!,
        },
      },
      imap: {
        host: 'imap.example.com',
        port: 993,
        tls: true,
        user: 'bot@example.com',
        password: process.env.EMAIL_PASSWORD!,
      },
    }
  ],
  plugins: ['@zhin.js/adapter-email']
})

使用示例

注册命令

typescript
import { usePlugin, MessageCommand } from 'zhin.js'

const { addCommand } = usePlugin()

addCommand(
  new MessageCommand('status')
    .desc('查询状态')
    .action(() => '机器人运行中')
)

消息处理

typescript
import { usePlugin } from 'zhin.js'

const { addMiddleware } = usePlugin()

addMiddleware(async (message, next) => {
  if (message.$adapter === 'email') {
    console.log('收到邮件:', message.$sender.name, message.$content)
  }
  await next()
})

故障排查

现象排查
IMAP 连接失败主机/端口/TLS 是否正确;是否需应用专用密码而非登录密码
收不到新邮件默认轮询间隔 30s(checkInterval);检查 mailbox 是否为 INBOX
SMTP 发送失败secure 与端口匹配(465 通常 secure: true);发信地址与 auth.user 一致
重复处理邮件确认 markSeen: true;检查是否多实例同时轮询同一邮箱

建议使用环境变量存储邮箱密码,勿提交到版本库。

文档链接

许可证

MIT License

基于 MIT 许可发布