· 阅读约 11 分钟
通过 API 自动化报告归档与邮件发送
端到端流程:原始数据 → PDF → 云端文件夹 → 邮件附件,仅用 REST(generate-document、folders、send-document)。
在企业应用与 SaaS 平台中,生成 PDF 文档只是拼图的第一块。 一旦报表、发票或送货单准备就绪,就会触发一连串必要操作:文件必须安全保存到有组织的文件夹结构中, 必须可供日后下载,并且常常需要立即通过邮件发送给客户或行政部门。
从零实现整套工作流意味着要编写代码来:
- 对接图形库以渲染 PDF。
- 配置并管理存储(本地或 AWS S3 存储桶),处理权限与路径。
- 配置 SMTP 服务器、管理发送队列,并确保带大附件的邮件不会落入垃圾箱。
在本指南中,我们将说明如何通过 API 自动归档并通过邮件发送报表: 把整个流程压缩为一系列 Web API REST 调用——生成、有序归档与发送—— 无需在管理系统中维护本地存储或专用 SMTP。
流程架构:生成 → 归档 → 发送
不必用独立线程处理文件与 SMTP 来加重软件后端负担,现代微服务方案使用按序协作的专用 API 端点。
三个关键步骤:
-
generate-document:接收应用 JSON 数据,注入预配置的图形模板并生成 PDF。 -
folders:在门户上将文件组织到逻辑目录树中 (例如:客户报表 / 2026 年 7 月)。在 generate-document 中传入folderId。 -
send-document:使用刚创建的documentId, 发送带附件的邮件(API key 上的 SMTP 或平台默认)。
实战指南:用 Node.js 实现工作流
下面把这套自动化落到代码里。目标:生成月度活动报表,归档到客户文件夹,并通过邮件发送。 文档:Web API。
const axios = require('axios');
const API_BASE = 'https://backend.quartzapi.com/index.php?r=api';
const API_KEY = 'TUO_API_KEY_SEGRETA';
const headers = {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
async function eseguiAutomazioneReport() {
try {
// 阶段 0(可选):创建期间文件夹
const folderRes = await axios.post(
`${API_BASE}/v1-folders/create`,
{ name: 'Clienti — Luglio 2026' },
{ headers }
);
const folderId = folderRes.data.folderId;
// 阶段 1:生成 PDF 并归档到文件夹
console.log('1. 正在生成 PDF...');
const genResponse = await axios.post(
`${API_BASE}/v1-jobs/generate-document`,
{
templateCode: 'REPORT_ATTIVITA',
folderId,
externalId: 'RPT-TECH-2026-07',
outputFormat: 'pdf',
data: {
cliente: 'Tech Solutions S.r.l.',
mese: 'Luglio 2026',
ore_totali: 45,
dettaglio_attivita: [
{
data: '05/07/2026',
descrizione: 'Refactoring database e indici SQL',
ore: 5
},
{
data: '12/07/2026',
descrizione: 'Sviluppo nuove API di integrazione',
ore: 40
}
]
}
},
{ headers }
);
const documentId = genResponse.data.result.documentId;
const downloadUrl = genResponse.data.result.downloadUrl;
console.log(`→ PDF 已归档。documentId: ${documentId}`);
console.log(`→ 下载:${downloadUrl}`);
// 阶段 2:发送带附件的邮件
console.log('2. 正在通过邮件发送 PDF...');
await axios.post(
`${API_BASE}/v1-jobs/send-document`,
{
documentId,
to: ['amministrazione@clientetech.it'],
subject: 'Report Attività Mensile - Luglio 2026',
body:
'Gentile cliente, in allegato trova il report delle attività di Luglio 2026.'
},
{ headers }
);
console.log('→ 邮件发送成功!');
} catch (error) {
console.error(
'工作流出错:',
error.response ? error.response.data : error.message
);
}
}
eseguiAutomazioneReport();
等效 cURL(generate + send)
# 1) 创建文件夹(从响应中保存 folderId)
curl -X POST "https://backend.quartzapi.com/index.php?r=api/v1-folders/create" \
-H "Authorization: Bearer TUO_API_KEY_SEGRETA" \
-H "Content-Type: application/json" \
-d '{"name":"Clienti — Luglio 2026"}'
# 2) 生成并归档
curl -X POST "https://backend.quartzapi.com/index.php?r=api/v1-jobs/generate-document" \
-H "Authorization: Bearer TUO_API_KEY_SEGRETA" \
-H "Content-Type: application/json" \
-d '{"templateCode":"REPORT_ATTIVITA","folderId":"fld_...","data":{...}}'
# 3) 发送邮件
curl -X POST "https://backend.quartzapi.com/index.php?r=api/v1-jobs/send-document" \
-H "Authorization: Bearer TUO_API_KEY_SEGRETA" \
-H "Content-Type: application/json" \
-d '{"documentId":"doc_...","to":["amministrazione@clientetech.it"],"subject":"Report Luglio 2026"}'
为何要取消本地存储与专用 SMTP 服务器?
把该流程迁移到专用 API 基础设施,可为软件公司带来三项立即可用的优势:
-
零磁盘空间问题(解耦存储):PDF 不驻留在应用服务器上。
无需担心磁盘满或专门备份:文件留在云端,可通过
GET api/v1-documents/download&uid={documentId}下载。 -
邮件送达率:配置带 SPF、DKIM 与 DMARC 的 SMTP 很复杂。
使用
send-document即可采用平台 SMTP 或 API key 上配置的 SMTP (门户 → Email/SMTP),无需在管理系统中自建邮件组件。 -
完整可追溯性:凭借唯一的
documentId,可重新获取、重发或下载文件, 而无需重新处理原始数据。
结语
文档流程自动化不应等同于沉重代码与复杂基础设施。 隔离业务逻辑,把图形排版、存储与邮件路由交给 API, 可使 SaaS 应用更精简、更快、更易扩展——正适合你在寻找如何 通过 API 生成并发送报表或将 PDF 保存到云文件夹时使用。
想自动化应用中的报表吗? QuartzAPI 旨在简化软件公司的工作。通过公开 Beta,你可配置云模板与文件夹, 并无初始成本地测试完整的生成与发送 API 流程。
即用代码片段
v1-folders/create·v1-folders/index(也可使用tree=1)v1-jobs/generate-document配合folderIdv1-jobs/send-document·v1-documents/download- 参考:Web API 文档