尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ToolJet SMTP 数据源接入指南:从服务器配置到邮件发送查询实战

ToolJet SMTP 数据源接入指南:从服务器配置到邮件发送查询实战 ToolJet SMTP 数据源接入指南从服务器配置到邮件发送查询实战【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetSMTP 数据源是 ToolJet 内置的邮件发送通道它允许应用通过任意标准 SMTP 邮件服务器Gmail、Yahoo、Outlook、自建服务器等对外发送邮件。本文以 docs/versioned_docs/version-3.0.0-LTS/data-sources/smtp.md 为主线结合仓库中 SMTP 插件的源码实现plugins/packages/smtp/lib/index.ts讲解连接配置、查询创建、参数含义与底层原理读完即可在 ToolJet 应用中独立配置 SMTP 数据源并完成邮件发送。SMTP 数据源能做什么SMTPSimple Mail Transfer Protocol数据源在 ToolJet 中扮演邮件出口的角色一旦在工作区中建立了 SMTP 连接该连接即可被工作区内的任意应用共享用于发送事务邮件、通知提醒、报表分发等场景。它属于 ToolJet 插件体系中的type: api类型数据源核心实现基于 Node.js 生态中成熟的 Nodemailer 库见 plugins/packages/smtp/lib/index.ts 的import nodemailer from nodemailer。数据源的整体接入方式在查询面板或 Data Sources 页面添加、多环境切换、权限管理等可参考 Data Sources 总览文档。建立 SMTP 连接要建立 SMTP 数据源连接有两种入口在应用编辑器底部的查询面板中点击 Add new Data source按钮从 ToolJet 仪表盘的左侧导航进入Data Sources页面选择SMTP数据源。ToolJet 连接 SMTP 服务器需要以下四个必填参数参数说明HostSMTP 服务器地址PortSMTP 服务端口Username用于认证的邮箱账号Password邮箱账号密码或授权码从插件清单 manifest.json 可以看到这四个参数均被标记为required且password字段带有encrypted: true标记意味着密码在保存时会经过加密处理界面上以Encrypted形式显示。清单中还定义了如下默认值defaults: { host: { value: localhost }, port: { value: 465 }, user: { value: }, password: { value: } }即默认端口为 465SSL 安全端口Host 默认为localhost实际使用时需按你的邮件服务商替换。常见邮件服务商的配置参数SMTP 的主机与端口通常由邮件服务商提供以下是文档中列出的主流邮箱服务商通用配置GmailHostsmtp.gmail.comPort587或465SSLUsername完整 Gmail 邮箱地址PasswordGmail 密码实际使用中通常需要应用专用密码/授权码Yahoo MailHostsmtp.mail.yahoo.comPort465SSLUsernameYahoo 邮箱地址PasswordYahoo 邮箱密码Outlook.com / HotmailHostsmtp.office365.comPort587或465SSLUsernameOutlook.com / Hotmail 邮箱地址PasswordOutlook.com / Hotmail 密码配置完成后界面会提供Test connection按钮验证连接是否可用。连接参数的底层实现从源码看SMTP 连接实际上由 getConnection 方法 构建async getConnection(sourceOptions: SourceOptions, _options?: object): PromiseTransporter { const { host, user, password } sourceOptions; const port Number(sourceOptions.port); const transport: Transporter nodemailer.createTransport({ port, host, secure: port 465, auth: { user, pass: password }, }); return transport; }几个值得注意的实现细节secure: port 465插件会根据端口号自动决定是否启用 SSL/TLS。当端口为 465 时走隐式 TLSsecure 连接使用 587 时则通过 STARTTLS 升级加密。这就是文档中Port 587 或 465 (SSL)两种写法的来源端口类型转换配置表单中的 Port 以字符串形式传入源码中通过Number(sourceOptions.port)显式转为数字测试连接testConnection方法调用 Nodemailer 的transporter.verify()来验证凭据有效性失败时统一抛出Invalid credentials错误index.ts。创建 SMTP 查询发送邮件连接建立后即可在应用中创建查询来发送邮件操作步骤如下点击编辑器底部查询管理器的 Add按钮选择上一步添加的SMTP数据源填写邮件发送所需的参数点击Preview预览输出或点击Run触发查询执行。必填参数参数说明From发件人邮箱地址To收件人邮箱地址Subject邮件主题Body邮件正文可在对应的Text纯文本与HTML富文本两个字段中分别填写可选参数参数说明From Name发件人显示名称CC mail to抄送收件人邮箱其他收件人可见其地址BCC mail to密送收件人邮箱地址对其他收件人隐藏Attachments邮件附件通过引用 File Picker 组件的文件或传入对象添加使用 File Picker 添加附件附件字段支持两种写法文档原文示例引用 File Picker 组件上传的文件{{ components.filepicker1.file }}或直接传入包含文件名与 dataURL 的对象{{ name: filename.jpg, dataURL: ...... }}参数与源码的对应关系查询表单的字段定义位于 operations.json其中每个字段均为codehinter类型意味着所有参数都支持写 JS 表达式{{ }}模板语法——例如 CC/BCC 字段的占位符为{{[devtooljet.io]}}说明抄送/密送支持传入字符串数组Attachments 字段占位符为{{components.filepicker1.file}}。这些字段在运行时被映射为 types.ts 中定义的QueryOptionsexport type QueryOptions { operation: string; from: string; from_name: string; to: string; cc: string[]; bcc: string[]; subject: string; textContent: string; htmlContent: string; attachment_array?: string | { name: string; dataURL: string }[]; };在 run 方法 中插件会将 Text 与 HTML 两个字段分别作为text和html传给 Nodemailer实现同一封邮件同时携带纯文本与 HTML 两个版本的效果邮件客户端会按自身能力自动选择渲染版本。附件处理逻辑值得留意attachment_array可能以 JSON 字符串形式传入源码会先尝试JSON.parse再对每个附件执行 base64 解码后组装为 Nodemailer 的Attachment对象const filesData (array: { name: string; dataURL: string }[]): Attachment[] { const newFiles array.map((x) { return { filename: x.name, content: Buffer.from(x.dataURL, base64) }; }); return newFiles; };邮件最终通过nodemailerTransport.sendMail(mailOptions)发送发送失败时抛出QueryError成功则返回{ status: ok, data: {} }。发送邮件后的返回值与使用方式SMTP 查询执行成功后返回status: ok的空数据对象。在实际应用中通常有两种使用方式事件触发在查询的Success事件处理器中挂接后续动作如弹出提示邮件已发送、更新表单状态等将邮件发送作为工作流中的一个环节组件联动从按钮的onClick事件中运行 SMTP 查询将表单输入例如文本输入组件的值通过{{ }}表达式填入 From、To、Subject、Body 等字段实现填表即发信的完整交互。常见问题与排错建议认证失败Invalid credentialstestConnection依赖transporter.verify()与邮件服务器完成一次真实握手若用户名或密码错误、或邮箱服务商要求使用应用专用密码如 Gmail 开启两步验证后的场景连接测试会直接失败。请先在邮箱服务商处确认认证方式端口与加密不匹配源码中secure完全由端口是否为 465 决定若你的服务器使用 465 以外的端口但需要显式 TLS或使用 587 且服务商不支持 STARTTLS都可能握手异常请以邮件服务商文档为准配置端口附件格式问题附件对象中的dataURL应为 base64 编码内容File Picker 组件返回的文件对象结构需与{ name, dataURL }保持一致否则解码后内容可能为空或损坏连接超时或无法解析主机确认 Host 填写的是可公网访问的 SMTP 地址自建服务器场景下还需检查防火墙是否放行了对应端口。小结SMTP 数据源为 ToolJet 应用提供了标准、可复用的邮件发送能力连接层只需 Host / Port / Username / Password 四项参数查询层提供 From、To、Subject、Body 及 CC / BCC / 附件等完整邮件要素且所有字段均支持{{ }}表达式与组件联动。底层由插件以 Nodemailer 驱动端口 465 自动启用 SSL、密码加密存储、附件 base64 解码等细节都在 plugins/packages/smtp 中可见一斑。结合 File Picker 组件与事件处理器即可在 ToolJet 中快速搭建通知、审批、报表分发等邮件自动化场景。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表