| 字段        | 类型     | 描述                                                                                                                                                                 | 默认值         | 是否必需       |
| :---------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | :------------- |
| `timezone`  | `string` | 应用的时区。例如 `Asia/Shanghai`。                                                                                                                                   | 服务器本地时区 | 否             |
| `telemetry` | `object` | Telemetry 配置。详见下方的 **Telemetry 配置** 部分。                                                                                                                 | (见具体字段)   | 否             |
| `api`       | `object` | API 配置。详见下方的 **API 配置** 部分。                                                                                                                             | (见具体字段)   | 否             |
| `llms`      | `列表`   | 大语言模型 (LLM) 配置。会被其他配置部分引用。详见下方的 **LLM 配置** 部分。                                                                                          | `[]`           | 是 (至少 1 个) |
| `jina`      | `object` | Jina AI 配置。详见下方的 **Jina AI 配置** 部分。                                                                                                                     | (见具体字段)   | 否             |
| `scrape`    | `object` | 抓取配置。详见下方的 **抓取配置** 部分。                                                                                                                             | (见具体字段)   | 否             |
| `storage`   | `object` | 存储配置。详见下方的 **存储配置** 部分。                                                                                                                             | (见具体字段)   | 否             |
| `scheduls`  | `object` | 用于监控 Feed 的调度配置 (也称为监控规则)。详见下方的 **调度配置** 部分。                                                                                            | (见具体字段)   | 否             |
| `notify`    | `object` | 通知配置。它接收来自调度模块的结果，通过路由配置进行分组，并通过通知渠道发送给通知接收者。详见下方的 **通知配置**, **通知路由**, **通知接收者**, **通知渠道** 部分。 | (见具体字段)   | 是             |

### Telemetry 配置 (`telemetry`)

| 字段                  | 类型     | 描述                                                                           | 默认值       | 是否必需 |
| :-------------------- | :------- | :----------------------------------------------------------------------------- | :----------- | :------- |
| `telemetry.address`   | `string` | 暴露 Prometheus 指标 & pprof。                                                 | `:9090`      | 否       |
| `telemetry.log`       | `object` | Telemetry 相关的日志配置。                                                     | (见具体字段) | 否       |
| `telemetry.log.level` | `string` | Telemetry 相关消息的日志级别, 可选值为 `debug`, `info`, `warn`, `error` 之一。 | `info`       | 否       |

### API 配置 (`api`)

| 字段               | 类型     | 描述                                                                                      | 默认值                  | 是否必需              |
| :----------------- | :------- | :---------------------------------------------------------------------------------------- | :---------------------- | :-------------------- |
| `api.http`         | `object` | HTTP API 配置。                                                                           | (见具体字段)            | 否                    |
| `api.http.address` | `string` | HTTP API 的地址 (`[host]:port`)。例如 `0.0.0.0:1300`。应用运行后不可更改。                | `:1300`                 | 否                    |
| `api.mcp`          | `object` | MCP API 配置。                                                                            | (见具体字段)            | 否                    |
| `api.mcp.address`  | `string` | MCP API 的地址 (`[host]:port`)。例如 `0.0.0.0:1301`。应用运行后不可更改。                 | `:1301`                 | 否                    |
| `api.llm`          | `string` | 用于总结 Feed 的 LLM 名称。例如 `my-favorite-gemini-king`。引用在 `llms` 部分定义的 LLM。 | `llms` 部分中的默认 LLM | 是 (如果使用总结功能) |

### LLM 配置 (`llms[]`)

此部分定义了可用的大语言模型列表。至少需要一个 LLM 配置。

| 字段                     | 类型      | 描述                                                                                                                                                                                         | 默认值             | 是否必需                                       |
| :----------------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------- | :--------------------------------------------- |
| `llms[].name`            | `string`  | LLM 的名称 (或称 'id')。例如 `my-favorite-gemini-king`。用于在其他配置部分 (如 `api.llm`, `storage.feed.embedding_llm` 等) 引用此 LLM。                                                      |                    | 是                                             |
| `llms[].default`         | `bool`    | 此 LLM 是否为默认 LLM。只能有一个 LLM 是默认的。                                                                                                                                             | `false`            | 否 (但如果依赖默认行为，则必须有一个为 `true`) |
| `llms[].provider`        | `string`  | LLM 的提供商, 可选值为 `openai`, `openrouter`, `deepseek`, `gemini`, `volc`, `siliconflow` 之一。例如 `openai`。                                                                             |                    | 是                                             |
| `llms[].endpoint`        | `string`  | LLM 的自定义端点。例如 `https://api.openai.com/v1`。                                                                                                                                         | (提供商特定默认值) | 否                                             |
| `llms[].api_key`         | `string`  | LLM 的 API 密钥。                                                                                                                                                                            |                    | 是                                             |
| `llms[].model`           | `string`  | LLM 的模型。例如 `gpt-4o-mini`。如果用于生成任务 (如总结)，则不能为空。如果此 LLM 被使用，则不能与 `embedding_model` 同时为空。                                                              |                    | 条件性必需                                     |
| `llms[].embedding_model` | `string`  | LLM 的 Embedding 模型。例如 `text-embedding-3-small`。如果用于 Embedding，则不能为空。如果此 LLM 被使用，则不能与 `model` 同时为空。**注意：** 初次使用后请勿直接修改，应添加新的 LLM 配置。 |                    | 条件性必需                                     |
| `llms[].tts_model`       | `string`  | LLM 的文本转语音 (TTS) 模型。                                                                                                                                                                |                    | 否                                             |
| `llms[].temperature`     | `float32` | LLM 的温度 (0-2)。                                                                                                                                                                           | `0.0`              | 否                                             |

### Jina AI 配置 (`jina`)

此部分用于配置 Jina AI Reader API 的相关参数，主要供重写规则中的 `crawl_by_jina` 类型使用。

| 字段         | 类型     | 描述                                                                                                                                                                         | 默认值 | 是否必需 |
| :----------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :------- |
| `jina.token` | `string` | Jina AI 的 API Token。从 [Jina AI API Dashboard](https://jina.ai/api-dashboard/) 获取。提供 Token 可以获得更高的服务速率限制。如果留空，将以匿名用户身份请求，速率限制较低。 |        | 否       |

### 抓取配置 (`scrape`)

| 字段                     | 类型            | 描述                                                                                                                                                   | 默认值 | 是否必需                            |
| :----------------------- | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :---------------------------------- |
| `scrape.past`            | `time.Duration` | 抓取 Feed 的回溯时间窗口。例如 `1h` 表示只抓取过去 1 小时的 Feed。                                                                                     | `24h`  | 否                                  |
| `scrape.interval`        | `time.Duration` | 抓取每个源的频率 (全局默认值)。例如 `1h`。                                                                                                             | `1h`   | 否                                  |
| `scrape.rsshub_endpoint` | `string`        | RSSHub 的端点。你可以部署自己的 RSSHub 服务器或使用公共实例 (参见 [RSSHub 文档](https://docs.rsshub.app/guide/instances))。例如 `https://rsshub.app`。 |        | 是 (如果使用了 `rsshub_route_path`) |
| `scrape.sources`         | `对象列表`      | 用于抓取 Feed 的源列表。详见下方的 **抓取源配置**。                                                                                                    | `[]`   | 是 (至少一个)                       |

### 抓取源配置 (`scrape.sources[]`)

描述每个要抓取的源。

| 字段                        | 类型                | 描述                                                                                 | 默认值          | 是否必需              |
| :-------------------------- | :------------------ | :----------------------------------------------------------------------------------- | :-------------- | :-------------------- |
| `scrape.sources[].interval` | `time.Duration`     | 抓取此特定源的频率。覆盖全局 `scrape.interval`。                                     | 全局 `interval` | 否                    |
| `scrape.sources[].name`     | `string`            | 源的名称。用于标记 Feed。                                                            |                 | 是                    |
| `scrape.sources[].labels`   | `map[string]string` | 附加到此源 Feed 的额外键值标签。                                                     | `{}`            | 否                    |
| `scrape.sources[].rss`      | `object`            | 此源的 RSS 配置。详见下方的 **抓取源 RSS 配置**。每个源只能设置一种类型 (例如 RSS)。 | `nil`           | 是 (如果源类型是 RSS) |

### 抓取源 RSS 配置 (`scrape.sources[].rss`)

| 字段                                     | 类型     | 描述                                                                                                                               | 默认值 | 是否必需                                        |
| :--------------------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------- | :----- | :---------------------------------------------- |
| `scrape.sources[].rss.url`               | `string` | RSS Feed 的完整 URL。例如 `http://localhost:1200/github/trending/daily/any`。如果设置了 `rsshub_route_path` 则不能设置此项。       |        | 是 (除非设置了 `rsshub_route_path`)             |
| `scrape.sources[].rss.rsshub_route_path` | `string` | RSSHub 路由路径。例如 `github/trending/daily/any`。将与 `scrape.rsshub_endpoint` 拼接成最终 URL。如果设置了 `url` 则不能设置此项。 |        | 是 (除非设置了 `url`, 且需要 `rsshub_endpoint`) |

### 存储配置 (`storage`)

| 字段             | 类型     | 描述                                                            | 默认值       | 是否必需 |
| :--------------- | :------- | :-------------------------------------------------------------- | :----------- | :------- |
| `storage.dir`    | `string` | 所有存储的基础目录。应用运行后不可更改。                        | `./data`     | 否       |
| `storage.feed`   | `object` | Feed 存储配置。详见下方的 **Feed 存储配置**。                   | (见具体字段) | 否       |
| `storage.object` | `object` | 对象存储配置，用于存储播客等文件。详见下方的 **对象存储配置**。 | (见具体字段) | 否       |

### Feed 存储配置 (`storage.feed`)

| 字段                          | 类型            | 描述                                                                                                                                                                                             | 默认值                  | 是否必需 |
| :---------------------------- | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :------- |
| `storage.feed.rewrites`       | `对象列表`      | 在存储每个 Feed 之前如何处理它。受 Prometheus relabeling 启发。详见下方的 **重写规则配置**。                                                                                                     | `[]`                    | 否       |
| `storage.feed.flush_interval` | `time.Duration` | 将 Feed 存储刷新到数据库的频率。更高的值会带来更高的数据丢失风险，但能减少磁盘操作并提高性能。                                                                                                   | `200ms`                 | 否       |
| `storage.feed.embedding_llm`  | `string`        | 用于 Feed Embedding 的 LLM 名称 (来自 `llms` 部分)。显著影响语义搜索的准确性。**注意：** 如果要切换，请注意保留旧的 LLM 配置，因为过去的数据仍隐式关联它，否则会导致过去的数据无法进行语义搜索。 | `llms` 部分中的默认 LLM | 否       |
| `storage.feed.retention`      | `time.Duration` | Feed 的保留时长。                                                                                                                                                                                | `8d`                    | 否       |
| `storage.feed.block_duration` | `time.Duration` | 每个基于时间的 Feed 存储块的保留时长 (类似于 Prometheus TSDB Block)。                                                                                                                            | `25h`                   | 否       |

### 对象存储配置 (`storage.object`)

| 字段                               | 类型     | 描述                           | 默认值 | 是否必需              |
| :--------------------------------- | :------- | :----------------------------- | :----- | :-------------------- |
| `storage.object.endpoint`          | `string` | 对象存储的端点。               |        | 是 (如果使用播客功能) |
| `storage.object.access_key_id`     | `string` | 对象存储的 Access Key ID。     |        | 是 (如果使用播客功能) |
| `storage.object.secret_access_key` | `string` | 对象存储的 Secret Access Key。 |        | 是 (如果使用播客功能) |
| `storage.object.bucket`            | `string` | 对象存储的存储桶名称。         |        | 是 (如果使用播客功能) |
| `storage.object.bucket_url`        | `string` | 对象存储的桶访问 URL。       |        | 否                    |

### 重写规则配置 (`storage.feed.rewrites[]`)

定义在存储前处理 Feed 的规则。规则按顺序应用。

| 字段                                     | 类型         | 描述                                                                                                                                                                 | 默认值                   | 是否必需                                       |
| :--------------------------------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------- | :--------------------------------------------- |
| `...rewrites[].if`                       | `字符串列表` | 用于匹配 Feed 的条件配置。如果未设置，则表示匹配所有 Feed。类似于标签过滤器，例如 `["source=github", "title!=xxx"]`。如果条件不满足，则跳过此规则。                  | `[]` (匹配所有)          | 否                                             |
| `...rewrites[].source_label`             | `string`     | 用作转换源文本的 Feed 标签。默认标签包括: `type`, `source`, `title`, `link`, `pub_time`, `content`。                                                                 | `content`                | 否                                             |
| `...rewrites[].skip_too_short_threshold` | `*int`       | 如果设置，`source_label` 文本长度低于此阈值的 Feed 将被此规则跳过 (处理将继续进行下一条规则，如果没有更多规则则进行 Feed 存储)。有助于过滤掉过短/信息量不足的 Feed。 | `300`                    | 否                                             |
| `...rewrites[].transform`                | `object`     | 配置如何转换 `source_label` 文本。详见下方的 **重写规则转换配置**。如果未设置，则直接使用 `source_label` 文本进行匹配。                                              | `nil`                    | 否                                             |
| `...rewrites[].match`                    | `string`     | 用于匹配 (转换后) 文本的简单字符串。不能与 `match_re` 同时设置。                                                                                                     |                          | 否 (使用 `match` 或 `match_re`)                |
| `...rewrites[].match_re`                 | `string`     | 用于匹配 (转换后) 文本的正则表达式。                                                                                                                                 | `.*` (匹配所有)          | 否 (使用 `match` 或 `match_re`)                |
| `...rewrites[].action`                   | `string`     | 匹配时执行的操作: `create_or_update_label` (使用匹配/转换后的文本添加/更新标签), `drop_feed` (完全丢弃该 Feed)。                                                     | `create_or_update_label` | 否                                             |
| `...rewrites[].label`                    | `string`     | 要创建或更新的 Feed 标签名称。                                                                                                                                       |                          | 是 (如果 `action` 是 `create_or_update_label`) |
| `...transform.to_text`                   | `object`     | 使用 LLM 将源文本转换为文本。详见下方的 **重写规则转换为文本配置**。                                                                                                 | `nil`                    | 否                                             |
| `...transform.to_podcast`                | `object`     | 将源文本转换为播客。详见下方的 **重写规则转换为播客配置**。                                                                                                          | `nil`                    | 否                                             |

### 重写规则转换为文本配置 (`storage.feed.rewrites[].transform.to_text`)

此配置定义了如何将 `source_label` 的文本进行转换。

| 字段                | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                              | 默认值                  | 是否必需                     |
| :------------------ | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :--------------------------- |
| `...to_text.type`   | `string` | 转换的类型。可选值：<ul><li>`prompt` (默认): 使用 LLM 和指定的 Prompt 转换源文本。</li><li>`crawl`: 将源文本视为 URL，直接抓取该 URL 指向的网页内容，并将其转换为 Markdown 格式。此方式为本地抓取，会尝试遵循 `robots.txt`。</li><li>`crawl_by_jina`: 将源文本视为 URL，通过 [Jina AI Reader API](https://jina.ai/reader/) 抓取和处理网页内容，并返回 Markdown。功能可能更强大，例如处理动态页面，但依赖 Jina AI 服务。</li></ul> | `prompt`                | 否                           |
| `...to_text.llm`    | `string` | **仅当 `type` 为 `prompt` 时有效。** 用于转换的 LLM 名称 (来自 `llms` 部分)。如果未指定，将使用在 `llms` 部分中标记为 `default: true` 的 LLM。                                                                                                                                                                                                                                                                                    | `llms` 部分中的默认 LLM | 否                           |
| `...to_text.prompt` | `string` | **仅当 `type` 为 `prompt` 时有效。** 用于转换的 Prompt。源文本将被注入。可以使用 Go 模板语法引用内置 Prompt: `{{ .summary }}`, `{{ .category }}`, `{{ .tags }}`, `{{ .score }}`, `{{ .comment_confucius }}`, `{{ .summary_html_snippet }}`, `{{ .summary_html_snippet_for_small_model }}`。                                                                                                                                       |                         | 是 (如果 `type` 是 `prompt`) |

### 重写规则转换为播客配置 (`storage.feed.rewrites[].transform.to_podcast`)

此配置定义了如何将 `source_label` 的文本转换为播客。

| 字段                                         | 类型       | 描述                                                                                                      | 默认值                  | 是否必需 |
| :------------------------------------------- | :--------- | :-------------------------------------------------------------------------------------------------------- | :---------------------- | :------- |
| `...to_podcast.llm`                          | `string`   | 用于生成播客稿件的 LLM 名称 (来自 `llms` 部分)。                                                          | `llms` 部分中的默认 LLM | 否       |
| `...to_podcast.transcript_additional_prompt` | `string`   | 附加到播客稿件生成 Prompt 的额外指令。                                                                    |                         | 否       |
| `...to_podcast.tts_llm`                      | `string`   | 用于文本转语音 (TTS) 的 LLM 名称 (来自 `llms` 部分)。**注意：目前仅支持 `provider` 为 `gemini` 的 LLM**。 | `llms` 部分中的默认 LLM | 否       |
| `...to_podcast.speakers`                     | `对象列表` | 播客的演讲者列表。详见下方的 **演讲者配置**。                                                             | `[]`                    | 是       |

#### 演讲者配置 (`...to_podcast.speakers[]`)

| 字段                  | 类型     | 描述                      | 默认值 | 是否必需 |
| :-------------------- | :------- | :------------------------ | :----- | :------- |
| `...speakers[].name`  | `string` | 演讲者的名字。            |        | 是       |
| `...speakers[].role`  | `string` | 演讲者的角色描述 (人设)。 |        | 否       |
| `...speakers[].voice` | `string` | 演讲者的声音。            |        | 是       |

### 调度配置 (`scheduls`)

定义查询和监控 Feed 的规则。

| 字段             | 类型       | 描述                                                                                                     | 默认值 | 是否必需 |
| :--------------- | :--------- | :------------------------------------------------------------------------------------------------------- | :----- | :------- |
| `scheduls.rules` | `对象列表` | 用于调度 Feed 的规则列表。每个规则的结果 (匹配的 Feed) 将被发送到通知路由。详见下方的 **调度规则配置**。 | `[]`   | 否       |

### 调度规则配置 (`scheduls.rules[]`)

| 字段                              | 类型                | 描述                                                                                                                                                              | 默认值 | 是否必需                                  |
| :-------------------------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :---------------------------------------- |
| `scheduls.rules[].name`           | `string`            | 规则的名称。                                                                                                                                                      |        | 是                                        |
| `scheduls.rules[].query`          | `string`            | 用于查找相关 Feed 的语义查询。可选。                                                                                                                              |        | 否                                        |
| `scheduls.rules[].threshold`      | `float32`           | 相关性得分阈值 (0-1)，用于过滤语义查询结果。仅在设置了 `query` 时有效。                                                                                           | `0.6`  | 否                                        |
| `scheduls.rules[].label_filters`  | `字符串列表`        | 基于 Feed 标签的过滤器 (等于或不等于)。例如 `["category=tech", "source!=github"]`。                                                                               | `[]`   | 否                                        |
| `scheduls.rules[].labels`         | `map[string]string` | 附加到此源 Feed 的额外键值标签。                                                                                                                                  | `{}`   | 否                                        |
| `scheduls.rules[].every_day`      | `string`            | 相对于每天结束时间的查询范围。格式: `start~end` (HH:MM)。例如, `00:00~23:59` (今天), `-22:00~07:00` (昨天 22:00 到今天 07:00)。不能与 `watch_interval` 同时设置。 |        | 否 (使用 `every_day` 或 `watch_interval`) |
| `scheduls.rules[].watch_interval` | `time.Duration`     | 运行查询的频率。例如 `10m`。不能与 `every_day` 同时设置。                                                                                                         | `10m`  | 否 (使用 `every_day` 或 `watch_interval`) |

### 通知配置 (`notify`)

| 字段               | 类型       | 描述                                                                 | 默认值       | 是否必需          |
| :----------------- | :--------- | :------------------------------------------------------------------- | :----------- | :---------------- |
| `notify.route`     | `object`   | 主通知路由配置。详见下方的 **通知路由配置**。                        | (见具体字段) | 是                |
| `notify.receivers` | `对象列表` | 定义通知接收者 (例如电子邮件地址)。详见下方的 **通知接收者配置**。   | `[]`         | 是 (至少一个)     |
| `notify.channels`  | `object`   | 配置通知渠道 (例如电子邮件 SMTP 设置)。详见下方的 **通知渠道配置**。 | (见具体字段) | 是 (如果使用渠道) |

### 通知路由配置 (`notify.route` 及 `notify.route.sub_routes[]`)

此结构可以使用 `sub_routes` 进行嵌套。Feed 会首先尝试匹配子路由；如果没有子路由匹配，则应用父路由的配置。

| 字段                               | 类型         | 描述                                                                                                      | 默认值                  | 是否必需      |
| :--------------------------------- | :----------- | :-------------------------------------------------------------------------------------------------------- | :---------------------- | :------------ |
| `...matchers` (仅子路由)           | `字符串列表` | 标签匹配器，用于确定 Feed 是否属于此子路由。例如 `["category=tech", "source!=github"]`。                  | `[]`                    | 是 (仅子路由) |
| `...receivers`                     | `字符串列表` | 接收者的名称列表 (在 `notify.receivers` 中定义)，用于发送匹配此路由的 Feed 的通知。                       | `[]`                    | 是 (至少一个) |
| `...group_by`                      | `字符串列表` | 在发送通知前用于对 Feed 进行分组的标签列表。每个分组会产生一个单独的通知。例如 `["source", "category"]`。 | `[]`                    | 是 (至少一个) |
| `...source_label`                  | `string`     | 从每个 Feed 中提取内容并进行总结的源标签。默认为所有标签。强烈建议设置为 'summary' 以减少上下文长度。     | 所有标签                | 否            |
| `...summary_prompt`                | `string`     | 用于总结每个分组的 Feed 的 Prompt。                                                                       |                         | 否            |
| `...llm`                           | `string`     | 使用的 LLM 的名称。默认为 `llms` 部分中的默认 LLM。建议使用上下文长度较大的 LLM。                         | `llms` 部分中的默认 LLM | 否            |
| `...compress_by_related_threshold` | `*float32`   | 如果设置，则根据语义相关性压缩分组内高度相似的 Feed，仅发送一个代表。阈值 (0-1)，越高表示越相似。         | `0.85`                  | 否            |
| `...sub_routes`                    | `对象列表`   | 嵌套路由列表。允许定义更具体的路由规则。每个对象遵循 **通知路由配置**。                                   | `[]`                    | 否            |

### 通知接收者配置 (`notify.receivers[]`)

定义*谁*接收通知。

| 字段                         | 类型     | 描述                                                     | 默认值 | 是否必需              |
| :--------------------------- | :------- | :------------------------------------------------------- | :----- | :-------------------- |
| `notify.receivers[].name`    | `string` | 接收者的唯一名称。在路由中使用。                         |        | 是                    |
| `notify.receivers[].email`   | `string` | 接收者的电子邮件地址。                                   |        | 是 (如果使用 Email)   |
| `notify.receivers[].webhook` | `object` | 接收者的 Webhook 配置。例如: `webhook: { "url": "xxx" }` |        | 是 (如果使用 Webhook) |

### 通知渠道配置 (`notify.channels`)

配置通知*如何*发送。

| 字段                    | 类型     | 描述                                                      | 默认值 | 是否必需            |
| :---------------------- | :------- | :-------------------------------------------------------- | :----- | :------------------ |
| `notify.channels.email` | `object` | 全局 Email 渠道配置。详见下方的 **通知渠道 Email 配置**。 | `nil`  | 是 (如果使用 Email) |

### 通知渠道 Email 配置 (`notify.channels.email`)

| 字段                                  | 类型     | 描述                                                                                                                                                    | 默认值           | 是否必需 |
| :------------------------------------ | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------- | :------- |
| `...email.smtp_endpoint`              | `string` | SMTP 服务器端点。例如 `smtp.gmail.com:587`。                                                                                                            |                  | 是       |
| `...email.from`                       | `string` | 发件人 Email 地址。                                                                                                                                     |                  | 是       |
| `...email.password`                   | `string` | 发件人 Email 的应用专用密码。(对于 Gmail, 参见 [Google 应用密码](https://support.google.com/mail/answer/185833))。                                      |                  | 是       |
| `...email.feed_markdown_template`     | `string` | 用于在 Email 正文中格式化每个 Feed 的 Markdown 模板。默认渲染 Feed 内容。不能与 `feed_html_snippet_template` 同时设置。可用的模板变量取决于 Feed 标签。 | `{{ .content }}` | 否       |
| `...email.feed_html_snippet_template` | `string` | 用于格式化每个 Feed 的 HTML 片段模板。不能与 `feed_markdown_template` 同时设置。可用的模板变量取决于 Feed 标签。                                        |                  | 否       |
