Lumail

Polar Sponsor
爱发电 赞助
.NET 9.0

通过CLI和TypeScript SDK管理Lumail邮件营销平台;用于邮件营销、订阅者管理及营销活动创建。

Lumail - 电子邮件营销 CLI & SDK. 与 Lumail API 的交互,使用 CLI (pnpm lumail) 或 TypeScript SD

功能概述

Lumail - 电子邮件营销 CLI & SDK. 与 Lumail API 的交互,使用 CLI (pnpm lumail) 或 TypeScript SD是一项面向实际任务的技能,主要用于QQQ 快速启动.;CLI Referenceen。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Lumail — 电子邮件营销命令行工具(CLI)与软件开发套件(SDK)

可通过命令行工具(pnpm lumail)或 TypeScript SDK(import { Lumail } from "@/lib/lumail-sdk")与 Lumail API 进行交互。

快速开始

# 首先设置您的 API 密钥
pnpm lumail auth set 

# 验证是否配置成功
pnpm lumail auth test

CLI 参考文档

所有 CLI 命令均通过 pnpm lumail 执行。每个命令均支持全局标志(Global Flags)。

全局标志

标志 说明
--json 以 JSON 格式输出
--format 输出格式(默认为 text)
--verbose 启用调试日志
--no-color 禁用彩色输出
--no-header 省略表格标题(适用于管道操作)

身份验证

pnpm lumail auth set        # 保存 API 密钥(路径:~/.config/lumail/token)
pnpm lumail auth show              # 显示脱敏后的密钥
pnpm lumail auth show --raw        # 显示完整密钥
pnpm lumail auth remove            # 删除已保存的密钥
pnpm lumail auth test              # 验证密钥有效性

订阅者(Subscribers)

# 创建或更新(upsert)订阅者
pnpm lumail subscribers create --email user@example.com --name "John" --tags vip beta

# 通过邮箱或 ID 获取订阅者
pnpm lumail subscribers get user@example.com

# 更新订阅者
pnpm lumail subscribers update user@example.com --name "John Doe"
pnpm lumail subscribers update user@example.com --tags premium --replace-tags

# 删除订阅者
pnpm lumail subscribers delete user@example.com

# 退订(Unsubscribe)
pnpm lumail subscribers unsubscribe user@example.com

# 管理标签(Tags)
pnpm lumail subscribers add-tags user@example.com --tags vip premium
pnpm lumail subscribers remove-tags user@example.com --tags old-tag

# 列出事件(Events)
pnpm lumail subscribers events user@example.com --take 50 --order desc

营销活动(Campaigns)

# 列出营销活动
pnpm lumail campaigns list
pnpm lumail campaigns list --status DRAFT --page 1 --limit 50
pnpm lumail campaigns list --query "welcome" --json

# 创建营销活动
pnpm lumail campaigns create --subject "Welcome!" --name "Welcome Campaign"

# 获取营销活动详情
pnpm lumail campaigns get 

# 更新营销活动(仅限 DRAFT 状态)
pnpm lumail campaigns update  --subject "Updated Subject" --preview "Preview text"

# 删除营销活动(仅限 DRAFT 状态)
pnpm lumail campaigns delete 

# 立即发送
pnpm lumail campaigns send 

# 定时发送
pnpm lumail campaigns send  --scheduled-at 2025-12-25T10:00:00Z --timezone UTC

标签(Tags)

pnpm lumail tags list
pnpm lumail tags create --name "premium"
pnpm lumail tags get premium          # 支持按名称或 ID 查询
pnpm lumail tags update  --name "gold"

邮件(Transactional Emails)

# 发送事务性邮件
pnpm lumail emails send 
  --to user@example.com 
  --from noreply@yourdomain.com 
  --subject "Order Confirmation" 
  --content "Your order #123 is confirmed." 
  --content-type MARKDOWN

# 禁用追踪功能
pnpm lumail emails send --to x --from y --subject z --content "Hello" --transactional

# 验证邮箱地址
pnpm lumail emails verify user@example.com

事件(Events)

pnpm lumail events create 
  --type SUBSCRIBER_PAYMENT 
  --subscriber user@example.com 
  --data '{"amount": 99, "plan": "pro"}'

支持的事件类型:SUBSCRIBED、UNSUBSCRIBED、TAG_ADDED、TAG_REMOVED、EMAIL_OPENED、EMAIL_CLICKED、EMAIL_SENT、EMAIL_RECEIVED、WORKFLOW_STARTED、WORKFLOW_COMPLETED、WORKFLOW_CANCELED、FIELD_UPDATED、EMAIL_BOUNCED、EMAIL_COMPLAINED、WEBHOOK_EXECUTED、SUBSCRIBER_PAYMENT、SUBSCRIBER_REFUND

工具(Tools,V2 API)

V2 工具 API 提供了 59+ 个面向 AI Agent 和高级操作的工具。

# 列出所有可用工具
pnpm lumail tools list

# 获取工具 Schema
pnpm lumail tools get list_subscribers

# 执行工具
pnpm lumail tools run list_subscribers --params '{"limit": 10, "status": "SUBSCRIBED"}'
pnpm lumail tools run create_campaign --params '{"name": "Test", "subject": "Hello"}'
pnpm lumail tools run send_campaign --params '{"campaignId": "abc123"}'

SDK 参考文档

SDK 源码位于 src/lib/lumail-sdk/,可通过 @/lib/lumail-sdk 导入使用。

初始化配置

import { Lumail } from "@/lib/lumail-sdk";

const lumail = new Lumail({
  apiKey: "lm_...",
  baseUrl: "https://lumail.io/api", // 可选,默认为此值
});

订阅者(Subscribers)

// 创建或更新(upsert)
const { subscriber } = await lumail.subscribers.create({
  email: "user@example.com",
  name: "John",
  tags: ["vip", "beta"],
  fields: { company: "Acme" },
  triggerWorkflows: true,
});

// 通过邮箱或 ID 获取
const { subscriber } = await lumail.subscribers.get("user@example.com");

// 更新
await lumail.subscribers.update("user@example.com", { name: "John Doe" });

// 删除
await lumail.subscribers.delete("user@example.com");

// 退订(Unsubscribe)
await lumail.subscribers.unsubscribe("user@example.com");

// 标签管理
await lumail.subscribers.addTags("user@example.com", ["premium"]);
await lumail.subscribers.removeTags("user@example.com", ["old-tag"]);

// 事件列表(基于游标分页)
const { events, nextCursor } = await lumail.subscribers.listEvents("user@example.com", {
  take: 20,
  order: "desc",
  eventTypes: ["EMAIL_OPENED", "EMAIL_CLICKED"],
});

营销活动(Campaigns)

// 分页列出
const { campaigns, total, pageCount } = await lumail.campaigns.list({
  status: "DRAFT",
  page: 1,
  limit: 20,
  query: "welcome",
});

// 创建
const { campaign, campaignId } = await lumail.campaigns.create({
  subject: "Welcome!",
  name: "Welcome Campaign",
  contentType: "MARKDOWN",
});

// 获取详情
const { campaign } = await lumail.campaigns.get(campaignId);

// 更新(仅限 DRAFT 状态)
await lumail.campaigns.update(campaignId, { subject: "Updated Subject" });

// 删除(仅限 DRAFT 状态)
await lumail.campaigns.delete(campaignId);

// 立即发送
await lumail.campaigns.send(campaignId);

// 定时发送
await lumail.campaigns.send(campaignId, {
  scheduledAt: "2025-12-25T10:00:00Z",
  timezone: "UTC",
});

邮件(Transactional Emails)

const { qstashMessageId } = await lumail.emails.send({
  to: "user@example.com",
  from: "noreply@yourdomain.com",
  subject: "Order Confirmation",
  content: "Your order is confirmed.",
  contentType: "MARKDOWN", // "MARKDOWN" | "HTML" | "TIPTAP"
  tracking: { links: true, open: true },
});

// 验证邮箱
const { isValid } = await lumail.emails.verify({ email: "test@example.com" });

标签(Tags)

const { tags } = await lumail.tags.list();
const { tag } = await lumail.tags.create({ name: "premium" });
const { tag } = await lumail.tags.get("premium"); // 支持按名称或 ID 查询
await lumail.tags.update("premium", { name: "gold" });

事件(Events)

await lumail.events.create({
  eventType: "SUBSCRIBER_PAYMENT",
  subscriber: "user@example.com",
  data: { amount: 99, plan: "pro" },
});

工具(Tools,V2 API)

// 列出所有工具
const { tools, grouped } = await lumail.tools.list();

// 获取工具 Schema
const { tool } = await lumail.tools.get("list_subscribers");

// 执行工具并指定响应类型
const result = await lumail.tools.run<{ subscribers: unknown[] }>(
  "list_subscribers",
  { limit: 10 },
);

错误处理

SDK 抛出强类型的错误对象,可捕获特定错误类型:

import {
  Lumail,
  LumailAuthenticationError,
  LumailNotFoundError,
  LumailRateLimitError,
  LumailValidationError,
  LumailPaymentRequiredError,
} from "@/lib/lumail-sdk";

try {
  await lumail.subscribers.get("unknown@example.com");
} catch (error) {
  if (error instanceof LumailNotFoundError) {
    // 404 - 订阅者未找到
  } else if (error instanceof LumailAuthenticationError) {
    // 401 - API 密钥无效
  } else if (error instanceof LumailRateLimitError) {
    // 429 - 请求频率超限,error.retryAfter 提供毫秒级重试延迟
  } else if (error instanceof LumailPaymentRequiredError) {
    // 402 - 达到套餐用量上限
  } else if (error instanceof LumailValidationError) {
    // 400 - 请求参数校验失败
  }
}

重试策略

  • GET / PUT / DELETE 请求在遇到网络错误或 429 响应时最多重试 3 次
  • POST / PATCH 请求不自动重试(防止重复创建订阅者或邮件)
  • 重试延迟:1 秒、2 秒、4 秒(指数退避)
  • 尊重服务端返回的 Retry-After 响应头
  • 单次请求默认超时时间为 30 秒

npm 包

发布于 npm,包名为 lumail,同时提供 CLI 和库两种使用方式:

# CLI 使用方式(需先执行:npm install -g lumail)
npx lumail auth set 
npx lumail subscribers create --email user@example.com

# 库使用方式
import { Lumail } from "lumail";
const lumail = new Lumail({ apiKey: "lm_..." });

包源码路径:packages/lumail/
构建命令:bun run build(在 packages/lumail/ 目录下执行)
自动发布:向 main 分支推送代码将触发 GitHub Actions 自动发布流程

文件路径说明

组件 路径
SDK 源码 src/lib/lumail-sdk/
CLI 源码 src/cli/
npm 包 packages/lumail/
构建脚本 packages/lumail/build.ts
测试用例 __tests__/lumail-sdk.test.ts、__tests__/lumail-cli.test.ts
API 文档 content/docs/api-reference/
GitHub Action 配置 .github/workflows/release-lumail.yml

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习