> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Email Send 端口

> 通过 SMTP 邮件服务器或 SendGrid 发送消息，支持 OAuth 2.0、基于模板的内容生成以及用于文件传递的附件模式。

Email Send 端口通过 SMTP 邮件服务器发送邮件。

## 核心功能

* 基于 SMTP 的邮件投递，支持用户指定的服务器或 SendGrid，并支持现代服务商的 OAuth 2.0 认证
* 支持模板模式，可根据 XML 数据或 ArcScript 生成动态内容
* 支持附件模式，可在发送文件的同时自定义邮件正文
* 支持多个收件人（To、CC 和 BCC）及动态字段填充

## 概览

Email Send 端口连接到 SMTP 服务器（用户指定或 SendGrid）投递服务，将文件作为传出电子邮件消息发送。端口处理的输入文件可以作为电子邮件附件直接发送，也可以从输入文件中解析数据，并通过脚本模板包含在传出消息中。有关创建脚本模板的更多信息，请参阅[模板模式](#模板模式)部分。

> [!NOTE]
>
> Outlook 和 Gmail 邮件服务器的 OAuth 2.0 配置是 Email Send 端口中最常见的两种连接配置。

## 端口配置

本节包含所有可配置的端口属性。

### 邮件配置

#### 建立连接

要允许 知行之桥 发送电子邮件，必须先建立 Email Send 连接。建立后，该连接可以在多个 Email Send 端口之间共享。建立此连接有以下两种方式：

1. 在流程中添加一个 Email Send 端口。然后使用 **Connection** 下拉菜单选择现有连接，或点击 **Create** 添加新连接。
2. 打开 知行之桥 **系统设置** 页面，然后打开 **Connections** 选项卡。点击 **Add**，选择 **Email Send**，然后点击 **Next**。
   > [!NOTE]
   >
   > 如果通过此方式创建连接，仍需在端口的 **Connection** 下拉菜单中选择该连接。

完成以下属性配置：

| 设置 | 描述 |
| - | - |
| **Email Protocol** | 选择使用用户指定的 SMTP 服务器还是 SendGrid。如果选择 SendGrid，则只保留 **TLS Type**。所有其他字段均与 SMTP 相关。 |
| **API Key** | 你的 SendGrid API 密钥。不适用于 知行之桥 Cloud 实现。 |
| **Host** | SMTP 服务器的主机名或 IP 地址。 |
| **Port** | 连接到 SMTP 服务器的端口。典型值包括 143 和 993。 |
| **Authentication Mechanism** | 用于登录服务器的身份验证类型。可用选项会根据你的选择而变化。 |
| **Password** | （Basic 和 NTLM）IMAP 服务器的密码。 |
| **Auth URL** | （OAuth 2.0）服务的授权 URL。点击 **Connect** 按钮登录并授予应用程序权限时，会定向到此 URL。 |
| **Access Token URL** | （OAuth 2.0）访问令牌的 URL。 |
| **Client Id** | （OAuth 2.0）注册 OAuth 时分配的客户端 Id。 |
| **Client Secret** | （OAuth 2.0）注册 OAuth 时分配的密钥。 |
| **Scope** | （OAuth 2.0）应用程序应有权访问的作用域列表。 |
| **Callback URL** | （OAuth 2.0）所连接服务返回令牌以提供访问权限的 URL。服务通常要求你将允许的 URL 加入白名单，因此在服务中配置应用程序注册时应使用此值。 |
| **None** | 不需要身份验证。 |
| **User** | 登录 SMTP 服务器的用户名。当 **Authentication Mechanism** 设置为 None 时不可见。 |
| **TLS Type** | 连接到服务器时用于协商 TLS/SSL 的方法： **STARTTLS**：先建立明文连接，然后可以通过显式命令启动 TLS/SSL。 **SSL/TLS**：无需先建立明文连接，立即进行协商。 **None (Plain Text)**：建立明文连接，不使用 TLS/SSL。 **Automatic**：根据端口号检测并应用合适的 TLS/SSL 协商方法。标准邮件端口（25、587）使用 STARTTLS，端口 465 使用 TLS/SSL。 |

建立与 SMTP 服务器的网络级连接需要以下设置：

* Host
* Port
* TLS Type

建立网络级连接后，需要以下设置才能访问服务器上存储的消息：

* User
* Password 或 OAuth 2.0 身份验证凭据
* Mailbox

SendGrid 唯一需要的设置是 TLS Type。

使用 **Add and Test** 按钮验证端口是否可以连接到服务器。

#### 其他配置

*与传出电子邮件消息相关的设置。大多数字段可以包含来自传出文件的动态数据（有关更多信息，请参阅[动态字段](#动态字段)）。*

| 设置 | 描述 |
| - | - |
| **Message Type** | 指定处理消息的方法： **Attachment**：将到达端口的文件作为附件发送。有关更多信息和示例，请参阅[附件模式](#附件模式)。 **Template**：将消息正文解释为从输入文件读取值的 ArcScript 模板。有关创建脚本模板的更多信息，请参阅[模板模式](#模板模式)。 |
| **To** | 传出电子邮件消息收件人的电子邮件地址。使用逗号分隔的列表发送给多个收件人。 |
| **Show From** | 展开一个字段，用于输入传出电子邮件消息发件人的电子邮件地址。端口会尝试根据传递给 SMTP 服务器的 **User** 凭据自动确定此字段的值。 |
| **Show Cc / Show Bcc** | 展开字段，用于输入要抄送（CC）或密件抄送（BCC）的电子邮件地址。使用逗号分隔的列表发送给多个收件人。 |
| **Subject** | 传出电子邮件消息的主题行。 |
| **Message Body** | 电子邮件正文。 |
| **Allow ArcScript in Email Body** | 当 **Message Type** 为 Attachment 时，勾选此项以允许在消息正文中计算 ArcScript。 |

> [!NOTE]
>
> 还可以点击 ArcScript 编辑器按钮，在 **To**、**From**、**CC**、**BCC** 和 **Subject** 字段中使用 ArcScript。

### 设置

#### 邮件发送配置

*与端口名称和描述相关的设置。*

<table><thead><tr><th>设置</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**端口 Id**</td>
<td>端口的静态、唯一标识符。</td></tr>
<tr><td>**端口类型**</td>
<td>显示端口类型及其用途的描述。</td></tr>
<tr><td>**端口描述**</td>
<td>一个可选字段，用于提供端口及其在流中的角色的自由格式描述。</td></tr></tbody></table>

### 高级页面

#### 高级设置

*与处理相关的额外设置。*

| 设置 | 描述 |
| - | - |
| **Attachment Filter** | 在发送消息之前应用的 glob 模式过滤器。模式可以是正向或负向的。例如，`*.edi` 仅发送扩展名为 `.edi` 的文件，`-*.tmp` 排除扩展名为 `.tmp` 的文件。可以提供逗号分隔的过滤器列表。除非使用精确匹配，否则后面的过滤器优先级更高。 |
| **Outgoing Server Public Certificate** | 用于验证 TLS/SSL 服务器身份的公钥证书。如果目标服务器使用 TLS/SSL，请将此字段设置为标识服务器的证书。如果服务器证书不可用，可以将此设置留空以允许底层 OS/JVM 执行证书验证，或将其设置为 `Any Certificate` 以隐式信任服务器身份。 |
| **Extension Map** | 逗号分隔的名称-值对列表，用于确定附件的 Content-Type 消息头值。例如，*.txt=text/plain、.dat=application/edi-x12、.edi=application/edifact* **注意**：在输入消息中包含 Content-Type 消息头会覆盖此设置确定的内容类型。 |
| **处理延迟** | 放置在 **交易** 选项卡中的文件在处理前延迟的时间（以秒为单位）。这是旧版设置。最佳做法是[使用 File 端口](https://docs.kasoftware.com/26.4/self-hosted/zh/flows/designing-a-flow.md#与本地文件系统交互)来管理本地文件系统，而不是使用此设置。 |

#### 代理配置

这是一组用于识别连接所经代理并对其进行身份验证的设置。默认情况下，本节使用 [安全设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/security.md) 页面的 [代理设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/proxy-settings.md) 部分中的全局设置。清除此复选框可为您的端口提供特定的设置。

<table><thead><tr><th>设置</th><th>描述</th></tr></thead>
<tbody><tr><td>**代理类型**</td>
<td>基于代理的防火墙使用的协议。</td></tr>
<tr><td>**代理主机**</td>
<td>基于代理的防火墙的名称或 IP 地址。</td></tr>
<tr><td>**代理端口**</td>
<td>基于代理的防火墙的 TCP 端口。</td></tr>
<tr><td>**代理用户**</td>
<td>用于通过基于代理的防火墙进行身份验证的用户名。</td></tr>
<tr><td>**代理密码**</td>
<td>用于对基于代理的防火墙进行身份验证的密码。</td></tr>
<tr><td>**身份验证方案**</td>
<td>保留默认值 **None** 或选择以下身份验证方案之一：**Basic**、**Digest**、**Proprietary** 或 **NTLM**。</td></tr></tbody></table>

#### 消息

*消息设置确定端口如何搜索消息并在处理后管理它们。*

**注意：**以下设置已弃用，默认处于隐藏状态。只有先前已启用这些设置或将其配置为非默认值的端口才会显示它们。若要保留成功处理的文件副本，请在工作流中右键单击该端口，选择**显示成功路径**，然后将成功路径连接到 [File 端口](https://docs.kasoftware.com/26.4/self-hosted/zh/connectors/file.md)。

<table><thead><tr><th>设置</th><th>描述</th></tr></thead>
<tbody><tr><td>**保存到已发送文件夹**（已弃用）</td>
<td>将端口处理的文件复制到 Sent 文件夹。默认禁用。保存到 Sent 文件夹中的文件不受[静态加密](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/encryption-at-rest.md)保护。</td></tr>
<tr><td>**已发送文件夹方案**（已弃用）</td>
<td>按所选时间间隔对 **Sent** 文件夹中的文件进行分组。仅在启用**保存到已发送文件夹**时适用。</td></tr></tbody></table>

#### 日志

*用于管理日志创建和存储的设置。*

<table><thead><tr><th>设置</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**日志级别**</td>
<td>指定要记录在端口日志目录中的信息类型：
<ul><li>**None** - 不创建任何日志。</li>
<li>**Error** - 仅当端口遇到错误时才创建日志。</li>
<li>**Warning** - 仅当端口发出警告时才创建日志。</li>
<li>**Info** - 记录工作流的一般信息，包括任何错误和警告（如果适用）。</li>
<li>**Debug** - 记录成功和失败工作流的详细调试信息。</li>
<li>**Trace** - 记录成功和失败工作流的详细跟踪信息。</li></ul>
\*\*请注意：\*\***Debug** 和 **Trace** 级别的日志可能会记录敏感信息，包括消息内容和 SSL 证书。尽管连接属性（例如密码）被屏蔽了，但在与您的组织外部共享它们之前，请查看此级别的日志以避免泄漏敏感信息。</td></tr>
<tr><td>**日志文件夹结构**</td>
<td>指示端口根据选定的时间间隔将日志文件夹中的文件分组。例如，**Weekly** 选项指示端口每周创建一个新的子文件夹，并将该周的所有日志存储在该文件夹中。空白设置告诉端口将所有日志直接保存在日志文件夹中。对于处理许多事务的端口，使用子文件夹有助于保持日志的有序性并提高性能。</td></tr>
<tr><td>**保留消息副本**</td>
<td>指示端口在日志目录中保存最新消息副本的切换。请注意，端口每个子文件夹只保留一个消息，并且端口在再次运行时会覆盖以前保存的消息。</td></tr></tbody></table>

#### 其他设置

*特殊设置适用于特定用例。*

<table><thead><tr><th>设置</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**其他设置**</td>
<td>允许在以分号分隔的列表中配置隐藏的端口设置，例如 `setting1=value1;setting2=value2`。正常的端口用例和功能不需要使用这些设置。</td></tr></tbody></table>

### 自动化

#### 自动化设置

| 设置 | 描述 |
| - | - |
| **发送** | 指示端口在文件准备就绪时自动发送文件的开关。 |
| **Retry Interval** | 端口在重试失败发送之前等待的间隔。 |
| **Max Attempts** | 端口尝试发送消息的次数。将此值设置为 *1* 会指示端口仅进行初始发送尝试而不重试。每次尝试之间，端口会等待 **Retry Interval** 指定的时长。 |

#### 性能

*与端口资源分配相关的设置。*

<table><thead><tr><th>设置</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**最大工作线程数**</td>
<td>此端口上处理文件时从线程池中消耗的最大工作线程数。如果设置，则会覆盖 [高级设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/advanced-settings.md) 页面的 [性能设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/performance-settings.md) 部分的默认设置。</td></tr>
<tr><td>**最大文件数**</td>
<td>分配给端口的每个线程发送的最大文件数。如果设置，则会覆盖 [高级设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/advanced-settings.md) 页面的 [性能设置](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/performance-settings.md) 部分的默认设置。</td></tr></tbody></table>

### 警报

*与配置通知相关的设置。*

在执行服务级别协议 (SLA) 之前，需要设置电子邮件通知以接收通知。默认情况下，知行之桥 使用 [通知](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/alerts.md) 选项卡上的全局设置。要为此端口使用其他设置，请启用 **覆盖全局设置**。

默认情况下，错误通知处于启用状态，这意味着每当出现错误时都会发送电子邮件。要关闭错误通知，请取消选中 **启用** 复选框。

输入 **主题**（必填）。勾选**允许在主题中使用 ArcScript**，即可在**主题**字段中使用 ArcScript。选中后会显示 **ArcScript 编辑器**按钮（![ArcScript 编辑器按钮](https://docs.kasoftware.com/26.4/images/rest_arcscript_editor.png)）。

（可选）输入以逗号分隔的**收件人**电子邮件地址列表。

### SLA

*与配置服务级别协议 (SLA) 相关的设置。*

SLA 允许配置预期流程中端口发送或接收的数据量，并设置预期达到该数据量的时间范围。当 SLA 未达到时，知行之桥 会发送电子邮件警告用户，并将 SLA 标记为 *存在风险*，这意味着如果 SLA 未能尽快达到，则会被标记为 *已违反*。这让用户有机会介入并确定 SLA 未达到的原因，并采取适当的措施。如果在风险时间段结束时仍未达到 SLA，则会将 SLA 标记为已违反，并再次通知用户。

SLA 转换为 *存在风险* 或 *已违反* 状态时，也会写入[应用程序日志](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/activity.md#应用程序日志)，这意味着应用性能监控 (APM) 和日志采集工具也可以针对这些状态发出警报。

要定义 SLA，请启用 **预期数据量**，然后点击 **设置** 选项卡。

![SLA Empty](https://docs.kasoftware.com/26.4/images/sla_empty.png)
<ul><li>如果端口具有单独的发送和接收操作，请使用单选按钮指定 SLA 适用的方向。</li>
<li>在窗口的 **预计至少** 部分中：
<ul><li>设置预计处理的最小事务数量（交易量）</li>
<li>使用 **每个** 字段指定时间范围</li>
<li>指示 SLA 生效的时间。如果选择 **开始于**，请填写日期和时间字段。</li>
<li>勾选希望 SLA 生效的星期几对应的复选框。如有必要，请使用下拉菜单选择 **每天**。</li></ul></li>
<li>在窗口的 **将状态设置为“有风险”** 部分中，指定应将 SLA 标记为有风险的时间。
<ul><li>默认情况下，只有在违反 SLA 的情况下才会发送通知。要更改此设置，请勾选 **发送“有风险”通知**。</li></ul></li></ul>

以下示例显示了为端口配置的 SLA，该端口预计在周一至周五每天接收 1000 个文件。如果尚未收到 1000 个文件，则会在时间段结束前 1 小时发送风险通知。

![SLA Configuration Example](https://docs.kasoftware.com/26.4/images/sla_defined.png)

> [!NOTE]
>
> 如果有必要，可以关闭 SLA 通知。这在维护窗口期间非常有用。点击导航栏上的 **设置**，然后跳转到 **通知 > 通用通知**。点击平板和铅笔图标进行编辑，并取消勾选 **SLA 通知** 设置。

### 交易

此选项卡列出与该端口关联的所有消息。使用搜索栏查找特定消息，或点击漏斗图标应用过滤器。可以按跟踪消息头、时间和/或状态进行过滤。

## 发送邮件

[邮件配置](#邮件配置)选项卡决定要发送的电子邮件消息：

* 如果 **Message Type** 设置为 **Attachment**，端口处理的文件将作为电子邮件附件发送，并且应在消息文本编辑器中指定消息正文。有关更多信息，请参阅[附件模式](#附件模式)。
* 如果 **Message Type** 设置为 **Template**，消息文本编辑器将被视为 ArcScript 模板。在脚本模板中，可以从端口处理的文件中解析值，并将其包含在电子邮件正文中。有关更多信息，请参阅[模板模式](#模板模式)。

要在一封电子邮件中发送多个附件，需要构建一个包含所有要包含附件的[批处理组](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/architecture.md#批量组)，然后将该批处理组发送到 Email Send 端口进行处理。

### 动态字段

**To**、**From**、**CC**、**BCC** 和 **Subject** 字段支持来自传出文件的动态信息（例如文件名和已处理该文件的端口）。

文件信息可通过 [*\_message*](https://docs.kasoftware.com/26.4/self-hosted/zh/scripting/introduction-to-arcscript.md#知行之桥消息（_message）) 项获得。*\_message* 项具有一组带有 `header:` 前缀的属性，对应于传出文件中可用的每个消息头。这些消息头包括文件名、与在 知行之桥 流程中处理文件相关的任何元数据，以及通过脚本提升到文件的任何自定义消息头。

与任何其他 ArcScript 项一样，*\_message* 项和消息头属性在方括号中引用：

`[_message.header:headerName]`

例如，可以将 Subject 设置为以下值，以包含传出文件的文件名：

`[_message.header:filename]`

### 模板模式

将 **Message Type** 设置为 Template 会指示端口将消息正文解释为 ArcScript 模板。模板使用简单的语法与输入文件交互，并检索要在电子邮件正文中使用的值。这些值可以与静态文本组合，生成根据端口处理的文件动态填充的标准正文格式。

要使用 Template 模式，端口必须接收 XML 文件作为输入。模板只能解析 XML 文件中的信息。

#### 基本模板

有关模板消息的示例，请考虑以下输入 XML 文档：

```xml theme={null}
<Lead>
  <Company>ABC, Inc.</Company>
  <Email>john@abcinc.com</Email>
  <FirstName>John</FirstName>
  <Description>Blue Widget</Description>
</Lead>
```

此文件在 `Lead` 标签内包含一组属性：`Company`、`Email`、`FirstName`、`Description`。将 `Email` 字段传入消息的 ArcScript 表达式如下所示：

`[document.lead_email]`

此表达式包含三个组件：

* *document* 项，指向当前打开的文件。
* *lead\_email* 属性，指向 `john@abcinc.com`。
* 方括号（`[]`），表示使用格式化器而不是文字字符。

上述 XML 输入文件的电子邮件正文模板可能如下所示：

```
Hi [document.lead_firstname],
<br>
We saw that you might be interested in the following product:
<br>
[document.lead_description]
<br>
Would you like to set up a demo to learn more about how we can help you with your work at [document.lead_company]?
```

此消息将生成以下电子邮件：

```
Hi John,

We saw that you might be interested in the following product:

Blue Widget

Would you like to set up a demo to learn more about how we can help you with your work at ABC, Inc.?
```

有关 ArcScript 的更多信息，请参阅[脚本](https://docs.kasoftware.com/26.4/self-hosted/zh/scripting/scripting.md)部分。

#### XPath 格式化

XPath 格式化器（在表达式中写为 `xpath`）提供了从文件中检索动态值的替代方法。对于已经在 知行之桥 其他位置使用 ArcScript 的用户来说，这种方法可能更熟悉。XPath 要求输入文件是 XML 文件。

使用与上面相同的输入文件示例：

```xml theme={null}
<Lead>
  <Company>ABC, Inc.</Company>
  <Email>john@abcinc.com</Email>
  <FirstName>John</FirstName>
  <Description>Blue Widget</Description>
</Lead>
```

返回电子邮件地址的 XPath 表达式如下：

`[xpath(/Lead/Email)]`

此表达式包含三个组件：

* *xpath* 后跟括号，表示该表达式为 XPath 表达式。
* 数据路径，每个级别用斜杠分隔。
* 方括号（`[]`），表示使用格式化器而不是文字字符。

##### 在模板模式下使用 XPath 格式化器

考虑以下 XML：

```xml theme={null}
<Items>
    <projectName>myProject</projectName>
    <assignee>Bob Ross</assignee>
    <dueDate>02/27/2024</dueDate>
    <resources>
        <description>http://mydomain.com/desc</description>
        <images>http://mydomain.com/images</images>
        <colors>http://mydomain.com/colors</colors>
    </resources>
</Items>
```

对上面的 XML 输入文件使用 xpath 表达式的电子邮件正文模板可能如下所示：

```xml theme={null}
Hi [xpath(/Items/assignee)],
<br>
You have a new project to start working on. The name of the project is [xpath(/Items/projectName)].
<br>
All the resources you need can be found at the following links:
<br>
<ul>
  <li>Description: [xpath(/Items/resources/description)]</li>
  <li>Images: [xpath(/Items/resources/images)]</li>
  <li>Colors: [xpath(/Items/resources/colors)]</li>
</ul>
<br>
The due date for this project is [xpath(/Items/dueDate)].
```

此消息将生成以下电子邮件：

```
Hi Bob Ross,

You have a new project to start working on. The name of the project is myProject.

All the resources you need can be found at the following links:

  - Description: http://mydomain.com/desc
  - Images: http://mydomain.com/images
  - Colors: http://mydomain.com/colors

The due date for this project is 02/27/2024.
```

#### 代码视图编辑器

代码视图编辑器支持创建自定义 ArcScript，以对来自 XML 文件的信息进行高级处理。要打开代码视图编辑器，请点击消息编辑器中的 **Code View** 按钮。

![](https://mintcdn.com/qiao/4hcVjuRd69QHuQ3V/26.4/images/code_view_editor.png?fit=max\&auto=format\&n=4hcVjuRd69QHuQ3V\&q=85\&s=9ce632eadb2a28eec9e0175f4e99cc51)

在此模式下，ArcScript 表达式可用于一次处理多个数据条目。以下输入文件示例包含名称列表：

```xml theme={null}
<record>
  <to>Dave</to>
  <items>
    <item>
      <first_name>James</first_name>
      <last_name>Satchel</last_name>
    </item>
    <item>
      <first_name>John</first_name>
      <last_name>Smith</last_name>
    </item>
    <item>
      <first_name>Gina</first_name>
      <last_name>Newberry</last_name>
    </item>
  </items>
</record>
```

在代码视图编辑器中编写的以下消息使用 ArcScript 合并了来自该输入文件的数据：

```xml theme={null}
Hi [document.record_to],
<br>
Here are the people you were asking about:
<br>
<arc:set attr="xml.xpath" value="/record/items/item" />
<arc:call op="xmlDOMSearch" in="xml">
  <arc:set attr="first.names" value="[xpath(first_name)]" />
  <arc:set attr="last.names" value="[xpath(last_name)]" />
  <arc:enum attr="first.names">
    [_value]
  </arc:enum>
  <arc:enum attr="last.names">
    [_value]
  </arc:enum>
  <br>
</arc:call>
```

此代码会循环输入 XML 文件中的所有名字和姓氏值，并将它们打印在消息正文中。使用上面的输入文件运行时，最终电子邮件如下所示：

```
Hi Dave,

Here are the people you were asking about:

James Satchel
John Smith
Gina Newberry
```

有关 ArcScript 和自定义表达式的更多信息，请参阅[脚本](https://docs.kasoftware.com/26.4/self-hosted/zh/scripting/scripting.md)部分。

### 附件模式

如果将 **Message Type** 设置为 Attachment，请在编辑器中输入电子邮件正文。如有必要，可以引用输入消息上的消息头来丰富电子邮件正文。然后，Email Send 端口会计算这些消息头，并将输入文件附加到传出电子邮件。

> [!NOTE]
>
> 这依赖于流程中的前一步将必要的值作为消息头提升到消息上。根据文件内容，可以使用各种[操作](https://docs.kasoftware.com/26.4/self-hosted/zh/scripting/operations/operations.md)和端口设置来执行此操作。

考虑以下 XML：

```xml theme={null}
<Items>
    <projectName>myProject</projectName>
    <assignee>Bob Ross</assignee>
    <dueDate>02/27/2024</dueDate>
    <resources>
        <description>http://mydomain.com/desc</description>
        <images>http://mydomain.com/images</images>
        <colors>http://mydomain.com/colors</colors>
    </resources>
</Items>
```

电子邮件正文可能如下所示：

```xml theme={null}
Hi [_message.header:assignee],
<br>
You have a new project to start working on. The name of the project is [_message.header:projectname].
<br>
All the resources you need can be found at the following links:
<br>
<ul>
  <li>Description: [_message.header:description]</li>
  <li>Images: [_message.header:images]</li>
  <li>Colors: [_message.header:colors]</li>
</ul>
<br>
The due date for this project is [_message.header:duedate].
```

此消息将生成以下电子邮件，并包含输入文件作为附件：

```
Hi Bob Ross,

You have a new project to start working on. The name of the project is myProject.

All the resources you need can be found at the following links:

  - Description: http://mydomain.com/desc
  - Images: http://mydomain.com/images
  - Colors: http://mydomain.com/colors

The due date for this project is 02/27/2024.
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.