> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man1/mail.1.md).

# Mail.1

`mail` — 发送和接收邮件

## 名称

`mail`, `Mail`, `mailx`

## 概要

`mailx [-dEiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ... [- sendmail-option ...] mailx [-dEHiInNv] [-F] -f [name] mailx [-dEHiInNv] [-F] [-u user] mailx [-d] -e [-f name]`

## 简介

`mailx` 是一个智能邮件处理系统，其命令语法类似于 ed(1)，只是将行替换为邮件。

可用选项如下：

```sh
mail -f /var/mail/user
```

**`-v`** 详细模式。邮件投递的细节将显示在用户终端上。

**`-d`** 调试模式。详见 `debug` 邮件选项。

**`-e`** 检测（默认为系统）邮箱中是否有邮件。如果邮箱中有邮件，返回退出状态 0；否则返回退出状态 1。

**`-H`** 仅输出邮件头摘要，然后退出。

**`-E`** 不发送正文为空的消息。适用于从 cron(8) 脚本中管道传递错误信息。

**`-i`** 忽略 tty 中断信号。在嘈杂的电话线上使用 `mailx` 时特别有用。

**`-I`** 强制 `mailx` 以交互模式运行，即使输入不是终端。特别是发送邮件时的 `~` 特殊字符仅在交互模式下才有效。

**`-n`** 启动时不读取系统范围的 `mail.rc` 文件。

**`-N`** 阅读邮件或编辑邮件夹时不显示初始的邮件头。

**`-s`** `subject` 在命令行指定 `subject`（主题）。（仅 `-s` 标志后的第一个参数作为主题；包含空格的主题需要加引号。）

**`-c`** `cc-addr` 向 `cc-addr` 用户列表发送抄送。`cc-addr` 参数应为以逗号分隔的名称列表。

**`-b`** `bcc-addr` 向 `bcc-addr` 用户列表发送密送。`bcc-addr` 参数应为以逗号分隔的名称列表。

**`-f`** \[`mbox`] 读入 `mbox`（或指定文件）的内容进行处理；退出（`quit`）时，`mailx` 将未删除的消息写回此文件。

**`-F`** 将消息记录到以第一个收件人命名的文件中。该名称取自邮件头中 “`To:`” 行上找到的第一个地址的登录名部分。覆盖已设置的 `record` 变量。

**`-u`** `user` 等价于：

### 启动操作

启动时，`mailx` 会依次执行系统命令文件 **/usr/share/misc/mail.rc**、**/usr/local/etc/mail.rc** 和 **/etc/mail.rc** 中的命令，除非使用 `-n` 选项明确禁止。接下来执行用户个人命令文件 `~/.mailrc` 中的命令。然后 `mailx` 检查命令行选项，确定是发送新消息还是读取现有邮箱。

### 发送邮件

向一个或多个人发送消息时，可以通过将收件人姓名作为参数调用 `mailx`。随后需要输入消息内容，在行首输入 <`control-D`> 结束。下文“回复或撰写邮件”一节描述了 `mailx` 中帮助你撰写邮件的一些功能。

### 阅读邮件

常规使用中，`mailx` 不带参数运行，从邮箱中取出邮件，然后打印每个消息的一行邮件头。当前消息最初是第一个消息（编号为 1），可以使用 `print` 命令（可缩写为 `p`）打印。可以在消息之间移动，方式与在 ed(1) 中移动行类似，使用 `+` 和 `-` 命令前后移动，或使用数字。

### 处理邮件

查看消息后，可以 `delete`（`d`）删除消息或 `reply`（`r`）回复消息。删除会使 `mailx` 忽略该消息。这并非不可逆；可以通过消息编号 `undelete`（`u`）恢复，或使用 `exit`（`x`）命令中止 `mailx` 会话。但被删除的消息通常会消失，无法再看到。

### 指定邮件

`print` 和 `delete` 等命令可以接受消息编号列表作为参数，一次性处理多个消息。因此 “`delete 1 2`” 删除消息 1 和 2，“`delete 1-5`” 删除消息 1 到 5。特殊名称 `*` 表示所有消息，`$` 表示最后一个消息；例如打印消息前几行的 `top` 命令可用于 “`top *`” 来打印所有消息的前几行。

### 回复或撰写邮件

可以使用 `reply` 命令设置对消息的回复，将其发回给发件人。随后输入的文本（直到文件结束符）即为消息内容。撰写消息时，`mailx` 会特殊处理以 `~` 字符开头的行。例如，输入 `~m`（单独成行）会将当前消息的副本放入回复中，并向右缩进一个 tabstop（见下文 `indentprefix` 变量）。其他转义可设置主题字段、添加和删除消息收件人，并允许转出到编辑器修改消息或转到 shell 执行某些命令。（这些选项见下文摘要。）

### 结束邮件处理会话

可以使用 `quit`（`q`）命令结束 `mailx` 会话。已查看的消息会进入 `mbox` 文件，除非已被删除，否则会被丢弃。未查看的消息会退回邮箱。（见上文 `-f` 选项。）

### 个人和系统级分发列表

还可以创建个人分发列表，例如向 “`cohorts`” 发送邮件即可发送给一组人。此类列表可以通过在主目录的 `.mailrc` 文件中加入如下行来定义：

```sh
alias cohorts bill ozalp jkf mark kridle@ucbcory
```

可以使用 `mailx` 中的 `alias` 命令显示当前别名列表。系统级分发列表可以通过编辑 **/etc/mail/aliases** 创建，参见 aliases(5) 和 sendmail(8)；这些列表使用不同的语法。在你发送的邮件中，个人别名会在发送给他人时展开，以便他们能够 `reply` 给收件人。系统级别名在邮件发送时不会展开，但返回到本机的任何回复都会展开系统级别名，因为所有邮件都经过 sendmail(8)。

### 网络邮件（ARPA、UUCP、Berknet）

`mailx` 有许多可在 `.mailrc` 文件中设置的选项以改变其行为；例如 “`set askcc`” 启用 `askcc` 功能。（这些选项见下文摘要。）

## 命令概览

（改编自 Mail 参考手册。）

每个命令单独成行输入，命令词后可跟参数。无需输入完整命令——匹配已输入前缀的第一个命令会被使用。对于以消息列表为参数的命令，如果未给出消息列表，则使用满足命令要求的下一个正向消息。如果当前消息之后没有消息，则向后搜索；如果完全没有符合条件的消息，`mailx` 会提示 “`No applicable messages`” 并中止命令。

**`-`** 打印前一个消息。如果给出数字参数 `n`，则转到第 `n` 个之前的消息并打印。

**`#`** 将该行剩余部分作为注释忽略。

**`?`** 打印命令简明摘要。

**`!`** 执行其后跟随的 shell（见 [sh(1)](/man/man1/sh.1.md) 和 [csh(1)](/man/man1/csh.1.md)）命令。

**`Print`** (`P`) 类似于 `print`，但还会打印被忽略的邮件头字段。另见 `print`、`ignore` 和 `retain`。

**`Reply`** (`R`) 回复发件人。不回复原消息的其他收件人。

**`Type`** (`T`) 等同于 `Print` 命令。

**`alias`** (`a`) 不带参数时，打印所有当前定义的别名。带一个参数时，打印该别名。带多个参数时，创建新别名或更改旧别名。

**`alternates`** (`alt`) 如果你在多台机器上有账户，`alternates` 命令非常有用。它可以告知 `mailx` 列出的地址实际上都是你自己。当你 `reply` 消息时，`mailx` 不会向 `alternates` 列表中的任何地址发送消息副本。如果不带参数调用 `alternates`，则显示当前的备用名称集合。

**`chdir`** (`c`) 如果给出目录参数，则将用户的工作目录更改为该目录。如果未给出目录，则切换到用户的登录目录。

**`copy`** (`co`) `copy` 命令的功能与 `save` 相同，但在 `quit` 时不会标记其所处理的消息为删除。

**`delete`** (`d`) 接受消息列表作为参数，将它们全部标记为删除。被删除的消息不会保存到 `mbox`，大多数其他命令也无法访问它们。

**`dp`** (亦作 `dt`) 删除当前消息并打印下一个消息。如果没有下一个消息，`mailx` 提示 “`at EOF`”。

**`edit`** (`e`) 接受消息列表，依次将文本编辑器指向每个消息。从编辑器返回后，消息会被重新读入。

**`exit`** (`ex` 或 `x`) 立即返回 shell，不修改用户的系统邮箱、`mbox` 文件或 `-f` 中的编辑文件。

**`file`** (`fi`) 等同于 `folder`。

**`folders`** 列出邮件夹目录中的邮件夹名称。

**`folder`** (`fo`) `folder` 命令切换到新的邮件文件或邮件夹。不带参数时，告知你当前正在读取的文件。如果给出参数，会保存当前文件中的更改（如删除）并读入新文件。名称中识别一些特殊约定：`#` 表示前一个文件，`%` 表示你的系统邮箱，“`%``user`” 表示用户的系统邮箱，`&` 表示你的 `mbox` 文件，“`+``folder`” 表示邮件夹目录中的文件。

**`from`** (`f`) 接受消息列表，打印它们的邮件头。

**`headers`** (`h`) 列出当前范围的邮件头，即 18 个消息为一组。如果给出 `+` 参数，打印下一组 18 个消息；如果给出 `-` 参数，打印上一组 18 个消息。

**`help`** `?` 的同义词。

**`hold`** (`ho`，亦作 `preserve`) 接受消息列表，将其中每个消息标记为保存到用户的系统邮箱而非 `mbox`。不覆盖 `delete` 命令。

**`ignore`** 将指定的邮件头字段列表加入忽略列表。打印消息时，忽略列表中的邮件头字段不会显示在终端上。此命令非常适合抑制某些机器生成的邮件头字段。`Type` 和 `Print` 命令可以完整打印消息，包括被忽略的字段。如果 `ignore` 不带参数执行，则列出当前被忽略的字段集合。

**`inc`** 合并在阅读邮件期间到达的任何新消息。新消息添加到消息列表末尾，当前消息重置为第一个新邮件消息。这不会重新编号现有消息列表，也不会保存目前所做的任何更改。

**`mail`** (`m`) 接受登录名和分发组名作为参数，向这些人发送邮件。

**`mbox`** 指示在退出时将一组消息发送到主目录中的 `mbox`。如果未设置 `hold` 选项，这是消息的默认操作。

**`more`** (`mo`) 接受消息列表，对该列表调用分页器。

**`next`** (`n`，类似于 `+` 或 CR) 转到序列中的下一个消息并显示。带参数列表时，显示下一个匹配的消息。

**`preserve`** (`pre`) `hold` 的同义词。

**`print`** (`p`) 接受消息列表，在用户终端上逐个显示消息。

**`quit`** (`q`) 终止会话，将所有未删除、未保存的消息保存到用户登录目录的 `mbox` 文件中，保留所有标记为 `hold` 或 `preserve` 的消息或从未引用的系统邮箱消息，并从系统邮箱中删除所有其他消息。如果会话期间收到新邮件，会提示 “`You have new mail`”。如果在使用 `-f` 标志编辑邮箱文件时执行此命令，则会重写编辑文件。随后返回 shell，除非编辑文件重写失败，此时用户可以使用 `exit` 命令退出。

**`reply`** (`r`) 接受消息列表，向指定消息的发件人和所有收件人发送邮件。默认消息不得被删除。

**`respond`** `reply` 的同义词。

**`retain`** 将指定的邮件头字段列表加入保留列表。打印消息时，仅显示保留列表中的邮件头字段，其他邮件头字段被抑制。`type` 和 `print` 命令可以完整打印消息。如果 `retain` 不带参数执行，则列出当前保留的字段集合。

**`save`** (`s`) 接受消息列表和文件名，将每个消息依次追加到文件末尾。终端会回显引号中的文件名，以及行数和字符数。

**`set`** (`se`) 不带参数时，打印所有变量值。否则设置选项。参数形式为 `option``=``value`（`=` 前后无空格）或 `option`。可以在赋值语句的任何部分加引号以引用空格或制表符，例如 “`set indentprefix=->`”。

**`saveignore`** `saveignore` 之于 `save`，如同 `ignore` 之于 `print` 和 `type`。通过 `save` 保存消息或自动保存到 `mbox` 时，如此标记的邮件头字段会被过滤掉。

**`saveretain`** `saveretain` 之于 `save`，如同 `retain` 之于 `print` 和 `type`。通过 `save` 保存消息或自动保存到 `mbox` 时，仅保留如此标记的邮件头字段。`saveretain` 覆盖 `saveignore`。

**`shell`** (`sh`) 调用交互式 shell。

**`size`** 接受消息列表，打印每个消息的字符大小。

**`source`** `source` 命令从文件中读取命令。

**`top`** 接受消息列表，打印每个消息的前几行。打印的行数由 `toplines` 变量控制，默认为 5。

**`type`** (`t`) `print` 的同义词。

**`unalias`** 接受由 `alias` 命令定义的名称列表，丢弃已记住的用户组。组名不再具有任何意义。

**`undelete`** (`u`) 接受消息列表，将每个消息标记为未删除。

**`unread`** (`U`) 接受消息列表，将每个消息标记为未读。

**`unset`** 接受选项名称列表，丢弃其已记住的值；`set` 的逆操作。

**`visual`** (`v`) 接受消息列表，对每个消息调用屏幕编辑器。

**`write`** (`w`) 类似于 `save`，但仅保存消息正文（不含邮件头）。对于通过消息系统发送和接收源程序文本等任务非常有用。

**`xit`** (`x`) `exit` 的同义词。

**`z`** `mailx` 按 `headers` 命令所述的窗口方式显示邮件头。可以使用 `z` 命令将 `mailx` 的注意力向前移动到下一个窗口。也可以使用 `z-` 移动到上一个窗口。

### 波浪符转义

以下是波浪符转义的摘要，用于在撰写消息时执行特殊功能。波浪符转义仅在行首识别。“波浪符转义”这一名称略有不当，因为实际转义字符可通过 `escape` 选项设置。

**`~a`** 将 sign= 选项中的签名串插入消息。

**`~A`** 将 Sign= 选项中的签名串插入消息。

**`~b`** `name ...` 将给定名称添加到抄送收件人列表，但不使名称在 Cc: 行中可见（“密送”）。

**`~c`** `name ...` 将给定名称添加到抄送收件人列表。

**`~d`** 将主目录中的 `dead.letter` 文件读入消息。

**`~e`** 对目前收集的消息调用文本编辑器。编辑会话结束后，可以继续向消息追加文本。

**`~f`** `messages` 将指定消息读入正在发送的消息。如果未指定消息，则读入当前消息。当前被忽略（通过 `ignore` 或 `retain` 命令）的邮件头不包括在内。

**`~F`** `messages` 等同于 `~f`，但包括所有邮件头。

**`~h`** 通过依次输入每个邮件头字段来编辑消息头，允许用户使用当前终端的擦除和删除字符在末尾追加文本或修改字段。

**`~i`** `string` 将指定选项的值插入消息文本。

**`~m`** `messages` 将指定消息读入正在发送的消息，通过 tab 或 `indentprefix` 的值缩进。如果未指定消息，则读入当前消息。当前被忽略（通过 `ignore` 或 `retain` 命令）的邮件头不包括在内。

**`~M`** `messages` 等同于 `~m`，但包括所有邮件头。

**`~p`** 打印目前收集的消息，前面附带邮件头字段。

**`~q`** 中止正在发送的消息，如果设置了 `save`，则将消息复制到主目录中的 `dead.letter`。

**`~r`** `filename`，**`~r`** `!``command`

**`~<`** `filename`，**`~<`** `!``command` 将指定文件读入消息。如果参数以 `!` 开头，字符串的其余部分被当作任意系统命令执行，其标准输出插入消息。

**`~R`** `string` 使用 `string` 作为 Reply-To 字段。

**`~s`** `string` 使指定字符串成为当前主题字段。

**`~t`** `name ...` 将给定名称添加到直接收件人列表。

**`~v`** 对目前收集的消息调用替代编辑器（由 `VISUAL` 环境变量定义）。通常，替代编辑器是屏幕编辑器。退出编辑器后，可以继续向消息末尾追加文本。

**`~w`** `filename` 将消息写入指定文件。

**`~x`** 与 `~q` 一样退出，但消息不保存到 `dead.letter`。

**`~!`** `command` 执行指定的 shell 命令，然后返回消息。

**`~|`** `command`，**`~^`** `command` 将消息通过命令作为过滤器管道传递。如果命令无输出或异常终止，则保留消息的原始文本。命令 fmt(1) 常用作 `command` 来重新格式化消息。

**`~:`** `mail-command`，`~_` `mail-command` 执行给定的 `mailx` 命令。但并非所有命令都允许。

**`~.`** 模拟输入文件结束符。

**`~?`** 打印可用命令转义的摘要。

**`~~`** `string` 将文本字符串插入消息，前面加一个 `~`。如果更改了转义字符，则需要双写该字符才能发送。

### 邮件选项

选项可以通过 `set` 命令设置，通过 `unset` 或 `set` `no``name` 命令禁用。选项可以是二进制的（此时仅关注是否设置），也可以是字符串的（此时关注实际值）。如果选项未设置，`mailx` 会查找同名环境变量。可用选项包括：

**`append`** 使保存到 `mbox` 的消息追加到末尾而非开头。应始终设置（最好在某个系统范围的 `mail.rc` 文件中）。默认为 `noappend`。

**`ask`**, **`asksub`** 使 `mailx` 在你发送每个消息时提示输入主题。如果仅以换行符响应，则不发送主题字段。默认为 `asksub`。

**`askbcc`** 使每个消息末尾提示你输入额外的密送收件人。以换行符响应表示对当前列表满意。默认为 `noaskbcc`。

**`askcc`** 使每个消息末尾提示你输入额外的抄送收件人。以换行符响应表示对当前列表满意。默认为 `noaskcc`。

**`autoinc`** 使新邮件到达时自动合并。设置此选项类似于在每个提示符处发出 `inc` 命令，但新邮件到达时不重置当前消息。默认为 `noautoinc`。

**`autoprint`** 使 `delete` 命令的行为类似于 `dp`；因此删除消息后会自动显示下一个消息。默认为 `noautoprint`。

**`crt`** 值选项 `crt` 用作阈值，确定消息必须多长才会使用 `PAGER` 阅读。如果 `crt` 未设置值，则使用系统中存储的终端屏幕高度计算阈值（见 stty(1)）。默认为 `nocrt`。

**`debug`** 设置二进制选项 `debug` 等同于在命令行指定 `-d`，使 `mailx` 输出各种用于调试 `mailx` 的信息。如果以此模式调用 `mailx` 发送邮件，所有准备工作都会执行并报告，但邮件不会实际发送。默认为 `nodebug`。

**`dot`** 二进制选项 `dot` 使 `mailx` 将单独成行的句号解释为正在发送的消息的终止符。默认为 `nodot`。

**`escape`** 如果定义，此选项的第一个字符给出用于代替 `~` 表示转义的字符。

**`flipr`** 反转 `reply` 和 `Reply` 命令的含义。默认为 `noflipr`。

**`folder`** 用于存储邮件夹的目录名称。如果名称以 `/` 开头，`mailx` 将其视为绝对路径名；否则邮件夹目录相对于主目录查找。

**`header`** 如果定义，阅读邮件或编辑邮件夹时初始显示邮件头。默认为 `header`。可以通过命令行给出 `-N` 标志禁用此选项。

**`hold`** 此选项用于默认将消息保留在系统邮箱中。默认为 `nohold`。

**`ignore`** 使来自终端的中断信号被忽略并回显为 `@`。默认为 `noignore`。

**`ignoreeof`** 与 `dot` 相关的选项 `ignoreeof` 使 `mailx` 拒绝接受 <`control-D`> 作为消息结束。`ignoreeof` 也适用于 `mailx` 命令模式。默认为 `noignoreeof`。

**`indentprefix`** `~m` 波浪符转义用于缩进消息的字符串，代替正常的 tab 字符（`^I`）。如果值包含空格或制表符，请务必加引号。

**`metoo`** 通常，展开包含发件人的组时，发件人会从展开中移除。设置此选项会使发件人包括在组中。默认为 `nometoo`。

**`quiet`** 首次调用时抑制版本信息的打印。默认为 `noquiet`。

**`record`** 如果定义，给出用于记录所有外发邮件的文件路径名。如果未定义，外发邮件不保存。默认为 `norecord`。

**`Replyall`** 反转 `reply` 和 `Reply` 命令的含义。默认为 `noReplyall`。

**`save`** 如果设置此选项，并且你通过两次 RUBOUT（擦除或删除）中止消息，`mailx` 会将部分邮件复制到主目录中的 `dead.letter` 文件。默认为 `save`。

**`searchheaders`** 如果设置此选项，则形式为 “`/``x`:`y`” 的消息列表说明符会展开为邮件头字段 `x` 中包含子字符串 `y` 的所有消息。字符串搜索不区分大小写。如果省略 `x`，则默认为 “`Subject`” 邮件头字段。形式 “`/to:``y`” 是特殊情况，会展开为 “`To`”、“`Cc`” 或 “`Bcc`” 邮件头字段中包含子字符串 `y` 的所有消息。对 “`to`” 的检查区分大小写，因此 “`/To:``y`” 可用于将 `y` 的搜索限制在仅 “`To:`” 字段。默认为 `nosearchheaders`。

**`toplines`** 如果定义，给出 `top` 命令打印的消息行数；通常打印前五行。

**`verbose`** 设置 `verbose` 选项等同于在命令行使用 `-v` 标志。当 `mailx` 以详细模式运行时，消息的实际投递会显示在用户终端上。默认为 `noverbose`。

## 环境变量

**`DEAD`** 在中断或投递错误时保存部分消息的文件路径名。默认为 `~/dead.letter`。

**`EDITOR`** 在 `edit` 命令和 `~e` 转义中使用的文本编辑器路径名。如果未定义，则使用默认编辑器。

**`HOME`** 用户主目录的路径名。

**`LISTER`** 在 `folders` 命令中使用的目录列表程序路径名。默认为 **/bin/ls**。

**`MAIL`** 用户邮箱的位置。默认为 **/var/mail**。

**`MAILRC`** 包含初始 `mailx` 命令的文件路径名。默认为 `~/.mailrc`。

**`MBOX`** 邮箱文件的名称。可以是邮件夹的名称。默认为用户主目录中的 `mbox`。

**`PAGER`** 在 `more` 命令或设置 `crt` 变量时使用的程序路径名。如果未定义此选项，则使用默认分页器 [less(1)](/man/man1/less.1.md)。

**`REPLYTO`** 如果设置，将用于初始化外发消息的 Reply-To 字段。

**`SHELL`** 在 `!` 命令和 `~!` 转义中使用的 shell 路径名。如果未定义此选项，则使用默认 shell。

**`TMPDIR`** 用于创建临时文件的目录路径名。

**`VISUAL`** 在 `visual` 命令和 `~v` 转义中使用的文本编辑器路径名。

**`USER`** 执行邮件操作的用户的登录名。

## 文件

**`/var/mail/*`** 邮局。

**`~/mbox`** 用户的旧邮件。

**`~/.mailrc`** 提供初始 `mailx` 命令的文件。可以通过设置 `MAILRC` 环境变量覆盖。

**`/tmp/mail.R*`** 临时文件。

**`/usr/share/misc/mail.*help`** 帮助文件。

**`/usr/share/misc/mail.rc`**

**`/usr/local/etc/mail.rc`**

**`/etc/mail.rc`** 系统范围初始化文件。每个文件按顺序读取（如果存在）。

## 参见

fmt(1), [newaliases(1)](/man/man1/newaliases.1.md), vacation(1), aliases(5), sendmail(8)

## 历史

`mailx` 命令出现于 Version 1 AT\&T UNIX。本手册页源自 Kurt Shoens 最初编写的 Mail 参考手册。

## 缺陷

有些标志此处未记录。大多数对普通用户无用。

通常，`mailx` 只是 `Mail` 和 `mailx` 的链接，这可能令人困惑。

`alternates` 列表的名称在英语中是不正确的（应为 “alternatives”），但为兼容性而保留。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man1/mail.1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
