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

# 客户邮件日志

> 查看 Dodo Payments 代表您向客户发送的每封事务性邮件，检查邮件是否送达，阅读发送时的邮件原文，并再次发送邮件。

<CardGroup cols={2}>
  <Card title="List Customer Emails" icon="list" href="/api-reference/customers/list-customer-emails">
    阅读客户已发送的邮件及其送达结果。
  </Card>

  <Card title="Get Email Content" icon="envelope-open" href="/api-reference/customers/get-customer-email-body">
    阅读一封邮件发送时的原文。
  </Card>
</CardGroup>

## 概览

Dodo Payments 代表您向客户发送事务性邮件：收据、退款通知、订阅通知、催收和恢复邮件、权益授予邮件，以及 Customer Portal 登录链接。

客户记录中的 **已发送的邮件** 标签页会记录每一封邮件。对于每封邮件，您都可以查看发送的内容、送达位置，以及在未送达时的失败原因。您可以打开客户收到的邮件，也可以再次发送。

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/sent-emails-tab.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=6c7fa235800cee5c32eb286312f2a52b" alt="客户的已发送的邮件标签页，列出每封邮件及其送达状态" style={{ maxHeight: '500px', width: 'auto' }} width="2310" height="996" data-path="images/email-logs/sent-emails-tab.png" />
</Frame>

<Info>
  邮件会保留 **180 天**。送达状态来自邮件服务提供商，并会在事件发生后的几秒内更新。
</Info>

## 查看客户的邮件

<Steps>
  <Step title="Open the customer">
    在控制面板中前往 **客户**，然后选择客户。
  </Step>

  <Step title="Open the Sent Emails tab">
    该标签页会列出过去 180 天内发送给此客户的每封邮件，最新的排在最前面。
  </Step>

  <Step title="Read a row">
    每行显示主题、主题下方的发件人、类别、日期和时间，以及送达状态。
  </Step>
</Steps>

## 送达状态

| 状态           | 含义                                  |
| ------------ | ----------------------------------- |
| `sent`       | Dodo Payments 已将邮件交给服务提供商。邮件正在发送途中。 |
| `delivered`  | 接收方邮件服务器已接受该邮件。                     |
| `failed`     | 邮件未送达。系统会显示失败原因。                    |
| `complained` | 收件人将邮件标记为垃圾邮件。                      |
| `blocked`    | 未发送任何邮件。在测试模式下，这表示每周配额已用尽。          |

### 失败原因

邮件发送失败时，该行会显示原因，以便您判断是否需要采取措施。将鼠标指向 **失败** 状态即可查看：

| 原因            | 含义                            | 操作           |
| ------------- | ----------------------------- | ------------ |
| 邮箱不存在         | 该地址不存在。                       | 更正客户的电子邮件地址。 |
| 邮件服务器拒绝地址     | 接收方服务器拒绝了该地址。                 | 使用其他地址。      |
| 地址因之前的失败而被阻止  | 服务提供商在之前发生硬退信或投诉后，禁止向该地址发送邮件。 | 使用其他地址。      |
| 邮箱已满          | 收件人的邮箱空间不足。                   | 稍后再次发送。      |
| 临时送达失败        | 接收方服务器出现临时问题。                 | 稍后再次发送。      |
| 邮件因过大而被拒绝     | 接收方服务器拒绝了该邮件大小。               | 联系支持团队。      |
| 收件人将邮件标记为垃圾邮件 | 收件人举报了该邮件。                    | 不要再次发送。      |
| 无法发送邮件        | 服务提供商拒绝发送。                    | 再次发送。        |

其中五种原因需要在重新发送时使用其他地址，因为使用同一地址仍会再次失败。这些原因是：邮箱不存在、邮件服务器拒绝地址、地址因之前的失败而被阻止、邮件因过大而被拒绝，以及收件人将邮件标记为垃圾邮件。

## 阅读邮件

选择某行上的 **重新发送** 以打开邮件面板。该面板中的 **邮件预览** 会显示保存的邮件副本，内容与发送时完全一致。

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/email-preview.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=b0d00b4b6fe62c6ace0b8a2b4419619b" alt="保存的邮件内容，显示为客户收到的样子" style={{ maxHeight: '500px', width: 'auto' }} width="824" height="1148" data-path="images/email-logs/email-preview.png" />
</Frame>

部分邮件没有可供显示的内容：

* **Customer Portal 登录邮件。** 这些邮件包含实时登录链接，因此不会显示其内容。
* **被阻止的邮件。** 这些邮件从未到达服务提供商，因此不存在副本。
* **超过 180 天的邮件。** 服务提供商会在此时清除邮件内容。

## 再次发送邮件

选择某行上的 **重新发送** 以再次发送同一封邮件。Dodo Payments 会根据原始事件重新渲染邮件，因此收据始终显示付款的当前状态。

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/resend-email.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=8751c05df35b14f116c8d487eaae7b70" alt="邮件行上的重新发送控件，可选择发送到其他地址" style={{ maxHeight: '500px', width: 'auto' }} width="896" height="2104" data-path="images/email-logs/resend-email.png" />
</Frame>

面板会在 **收件人** 字段中保留原始地址。更改该地址即可发送到其他位置。永久性失败后必须使用其他地址，因为使用同一地址仍会再次失败。

<Warning>
  重新发送会生成一封新邮件。它会作为标签页中的独立行显示。
</Warning>

### 限制

* 每封邮件最多可以再次发送 **三次**。
* 每次尝试之间有等待时间：第一次重新发送前等待五分钟，第二次前等待十分钟，第三次前等待十五分钟。
* 未到达服务提供商的发送不会计入三次限制，但仍会增加等待时间。
* 只能在控制面板中使用重新发送功能。API 为只读。

### 无法使用重新发送的情况

| 情况            | 原因                        |
| ------------- | ------------------------- |
| 收件人将邮件标记为垃圾邮件 | 再次发送会违反其投诉记录。             |
| 地址已被禁止发送      | 服务提供商接受发送请求后会丢弃邮件。        |
| 同一封邮件的后续发送已发出 | 此行是历史记录。再次发送会导致客户收到第二份副本。 |
| 客户已被阻止        | 被阻止的客户不会再收到您发送的邮件。        |
| 三次重新发送次数已用完   | 限制针对每封邮件单独计算。             |

<Note>
  Customer Portal 登录邮件始终会发送到请求登录链接的地址，并且每次重新发送都会生成一个新的登录链接。
</Note>

## 测试模式

测试模式会发送真实邮件，因此设有配额：**每个企业每周 100 封邮件**。重新发送也会使用同一配额。

配额用尽后，后续邮件会记录为 `blocked`，但不会实际发送。该行会显示“未发送：本周的测试模式邮件配额已用尽”。配额每周重置。实时模式没有此限制。

<Info>
  Customer Portal 登录邮件在测试模式下不会发送，也不会占用配额。
</Info>

## 通过 API 阅读邮件

您也可以通过 API key 获取邮件列表和内容，从而在自己的支持工具中显示送达状态。

<CodeGroup>
  ```bash cURL theme={null}
  curl https://live.dodopayments.com/customers/{customer_id}/emails?page_size=10 \
    -H "Authorization: Bearer $DODO_API_KEY"
  ```

  ```typescript Node.js theme={null}
  const res = await fetch(
    `https://live.dodopayments.com/customers/${customerId}/emails?page_size=10`,
    { headers: { Authorization: `Bearer ${process.env.DODO_API_KEY}` } },
  );
  const { items, total_count } = await res.json();
  ```

  ```python Python theme={null}
  import os, requests

  res = requests.get(
      f"https://live.dodopayments.com/customers/{customer_id}/emails",
      params={"page_size": 10},
      headers={"Authorization": f"Bearer {os.environ['DODO_API_KEY']}"},
  )
  items = res.json()["items"]
  ```
</CodeGroup>

每个项目都会包含 `status`；如果发送失败，还会包含 `failure_code` 和 `failure_reason`；此外，`has_preview` 用于表示是否存在已保存的内容。项目还包含一个 `policies` 对象，说明您可以对该行执行哪些操作：

| 字段                           | 含义                       |
| ---------------------------- | ------------------------ |
| `resend_allowed`             | 您可以再次发送此行对应的邮件。          |
| `retry_allowed`              | 发送失败，您可以再次尝试发送。          |
| `resends_remaining`          | 该邮件剩余的重新发送次数。            |
| `requires_different_address` | 使用同一地址仍会再次失败，因此必须提供其他地址。 |
| `superseded`                 | 同一封邮件的后续发送已替代此行。         |

请读取 `policies`，而不要自行推断是否符合条件。服务器会应用上述规则。

<CardGroup cols={2}>
  <Card title="Customer Management" icon="user-group" href="/features/customers">
    管理客户、购买历史记录和自助服务访问权限。
  </Card>

  <Card title="Communication Preferences" icon="bell" href="/features/communication-preferences">
    选择 Dodo Payments 代表您发送的邮件。
  </Card>
</CardGroup>
