根据配置和入站消息,将入站消息转换为适合邮件发送的格式。准备好的消息经 Success 连接发送,并应路由至发送邮件节点进行实际投递。
配置
发件人
- From — 发件人邮箱地址。
收件人
- To — 主要收件人邮箱地址,逗号分隔。
- Cc — 抄送收件人邮箱地址,逗号分隔。
- Bcc — 密送收件人邮箱地址,逗号分隔。
邮件主题与内容
- Subject — 邮件主题行。
- Mail body type — 决定邮件正文的处理方式。
- Plain text — 正文以纯文本发送,无格式。
- HTML — 正文以HTML渲染,支持格式、链接和图片。
- Use body type template — 正文类型(HTML或纯文本)在运行时根据模板确定。
- Body type template — 模板(如
${useHtml}),应根据入站消息data或metadata解析为"true"(HTML)或"false"(纯文本)。
- Body type template — 模板(如
- Body — 邮件正文内容。
JSON Schema
消息处理逻辑
- 节点接收入站消息。
- 通过替换模板为对应值,处理所有已配置的模板字段(
From、To、Cc、Bcc、Subject、Body、Body type template)。 - 在
Subject和Body字段中处理特殊模式:- 日期格式 — 可使用模式
%d{...}插入当前日期时间,花括号内为JavaSimpleDateFormat模式(如Device Alert at %d{yyyy-MM-dd HH:mm:ss})。使用的日期为消息处理时的时间戳。 - 时区 — 日期格式可支持时区。若入站消息metadata包含名为
emailTimezone的键且为有效时区ID(如Europe/Kyiv或America/New_York),将应用该时区。否则使用服务器默认时区。
- 日期格式 — 可使用模式
- 节点检查入站消息metadata中的特定键以包含附件或内嵌图片:
attachments— 文件UUID的逗号分隔字符串(系统Blob Entity ID)。每个文件将作为邮件附件。reports— 报告UUID的逗号分隔字符串。系统将附加对应的报告文件。images— 表示Content-ID(CID)到data URL映射的JSON字符串(如{"logo": "data:image/png;base64,..."})。可在HTML邮件正文中使用<img src="cid:logo">内嵌图片。
- 处理完成后,节点构建类型为
SEND_EMAIL的消息。该新消息的data是包含所有邮件详情(from、to、subject、body等)的JSON对象。 - 该新
SEND_EMAIL消息经Success连接路由。
输出连接
Success:- 转换后的类型为
SEND_EMAIL的消息经此连接发送。
- 转换后的类型为
Failure:- 转换过程中发生错误时发送原始消息。
示例
示例1:准备告警邮件
本示例展示当设备温度读数过高时,如何配置节点以准备基本告警邮件。
场景:设备发送带温度读数的消息。若温度过高,使用“创建告警”节点创建 High Temperature 告警。告警创建相关消息随后路由至“to email”节点。
入站消息
Data:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"id": {
"entityType": "ALARM",
"id": "0bb1683d-4ce1-4c94-8fa8-0a12aa1e77e3"
},
"createdTime": 1756464801953,
"tenantId": {
"entityType": "TENANT",
"id": "e37d0ee0-84bb-11f0-aa77-9bb4115aa01d"
},
"customerId": null,
"type": "High Temperature",
"originator": {
"entityType": "DEVICE",
"id": "dd312c60-84c0-11f0-aa77-9bb4115aa01d"
},
"severity": "CRITICAL",
"acknowledged": false,
"cleared": false,
"assigneeId": null,
"startTs": 1756464801946,
"endTs": 1756464801946,
"ackTs": 0,
"clearTs": 0,
"assignTs": 0,
"propagate": false,
"propagateToOwner": false,
"propagateToOwnerHierarchy": false,
"propagateToTenant": false,
"propagateRelationTypes": [],
"originatorName": "device",
"originatorLabel": "device",
"assignee": null,
"name": "High Temperature",
"status": "ACTIVE_UNACK",
"details": {
"temperatureValue": 95.5,
"temperatureThreshold": 90
}
}
Metadata:
1
2
3
4
{
"deviceName": "TempSensor-A1",
"deviceType": "Temperature Sensor"
}
节点配置
1
2
3
4
5
6
7
8
9
{
"fromTemplate": "alarms@yourcompany.com",
"toTemplate": "example@yourcompany.com",
"ccTemplate": null,
"bccTemplate": null,
"subjectTemplate": "${deviceType} - ${deviceName}: High temperature alarm",
"mailBodyType": "false",
"bodyTemplate": "A temperature of $[details.temperatureValue] exceeds the threshold of $[details.temperatureThreshold]."
}
出站消息
经 Success 链发送类型为 SEND_EMAIL 的消息。其data为表示待发送邮件的JSON对象:
1
2
3
4
5
6
7
8
9
10
11
12
{
"from": "alarms@yourcompany.com",
"to": "example@yourcompany.com",
"cc": null,
"bcc": null,
"subject": "Temperature Sensor - TempSensor-A1: High temperature alarm",
"body": "A temperature of 95.5 exceeds the threshold of 90.",
"attachments": null,
"reports": null,
"images": null,
"html": false
}
说明:节点使用替换模式动态构建邮件。主题通过从消息metadata取 ${deviceType} 和 ${deviceName} 生成。正文使用消息data中的值构建,特别是 $[details.temperatureValue] 和 $[details.temperatureThreshold]。如出站消息所示,这些占位符被入站消息中的对应值替换,形成可发送的完整邮件。