> ## 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.

# Registros de correos de clientes

> Consulta todos los correos transaccionales que Dodo Payments envió a un cliente, comprueba si llegaron, lee el correo exactamente como se envió y vuelve a enviarlo.

<CardGroup cols={2}>
  <Card title="List Customer Emails" icon="list" href="/api-reference/customers/list-customer-emails">
    Lee los correos enviados a un cliente y el resultado de su entrega.
  </Card>

  <Card title="Get Email Content" icon="envelope-open" href="/api-reference/customers/get-customer-email-body">
    Lee un correo exactamente como se envió.
  </Card>
</CardGroup>

## Descripción general

Dodo Payments envía correos transaccionales a tus clientes en tu nombre: recibos, avisos de reembolso, avisos de suscripción, correos de gestión de impagos y recuperación, concesiones de derechos y enlaces de inicio de sesión de Customer Portal.

La pestaña **Sent Emails** de un cliente registra cada correo. Para cada correo, puedes ver qué se envió, hasta dónde llegó y por qué no llegó cuando se produjo un error. Puedes abrir el correo que recibió tu cliente y volver a enviarlo.

<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="La pestaña Correos enviados de un cliente, que muestra cada correo con su estado de entrega" style={{ maxHeight: '500px', width: 'auto' }} width="2310" height="996" data-path="images/email-logs/sent-emails-tab.png" />
</Frame>

<Info>
  Los correos se conservan durante **180 días**. El estado de entrega proviene del proveedor de correo y normalmente se actualiza en cuestión de segundos después de cada evento de entrega.
</Info>

## Ver los correos de un cliente

<Steps>
  <Step title="Open the Customer">
    Ve a **Sales → Customers** en el dashboard y selecciona el cliente.
  </Step>

  <Step title="Open the Sent Emails Tab">
    La pestaña muestra todos los correos enviados a este cliente durante los últimos 180 días, empezando por los más recientes.
  </Step>

  <Step title="Read a Row">
    Cada fila muestra el asunto, con el remitente y la dirección del destinatario debajo. Las demás columnas muestran la **Categoría**, la **Fecha y hora**, el **Estado de entrega** y las **Acciones** que puedes realizar.
  </Step>
</Steps>

La categoría puede ser **Payments**, **Refunds**, **Subscriptions**, **Dunning & Recovery**, **Entitlements** o **Auth**. Los correos de inicio de sesión de Customer Portal pertenecen a **Auth**.

## Estado de entrega

Cada correo tiene uno de cinco estados. La API devuelve el valor del estado y el dashboard muestra su etiqueta:

| Estado | Etiqueta del dashboard | Significado |
| - | - | - |
| `sent` | **Enviado** | Dodo Payments entregó el correo al proveedor. Está en camino o el servidor receptor aún no ha respondido. |
| `delivered` | **Entregado** | El servidor de correo receptor aceptó el correo. |
| `failed` | **Fallido** | El correo no llegó. Se muestra el motivo del fallo. |
| `complained` | **Marcado como spam** | El destinatario marcó el correo como spam. |
| `blocked` | **No enviado** | No se envió nada porque se agotó el límite semanal del modo de prueba. |

### Motivos del fallo

Cuando un correo no llega, la fila incluye un motivo para que sepas si debes actuar. Coloca el cursor sobre el estado de la fila para leerlo. La API devuelve el mismo motivo en `failure_reason` y un código estable en `failure_code`:

| Motivo | `failure_reason` | Qué significa | Qué hacer |
| - | - | - | - |
| El buzón no existe | `mailbox_not_found` | La dirección no existe. | Corrige la dirección de correo del cliente. |
| El servidor de correo rechazó la dirección | `address_rejected` | El servidor receptor rechazó la dirección. | Usa otra dirección. |
| La dirección se bloqueó después de fallos anteriores | `address_suppressed` | El proveedor suprimió esta dirección después de un hard bounce o una queja anteriores. | Usa otra dirección. |
| El buzón está lleno | `mailbox_full` | El buzón del destinatario no tiene espacio. | Vuelve a intentarlo más tarde. |
| Fallo temporal de entrega | `temporary_failure` | Un problema temporal en el servidor receptor. | Vuelve a intentarlo más tarde. |
| El mensaje se rechazó por ser demasiado grande | `message_too_large` | El servidor receptor rechazó el tamaño. | Contacta con soporte. |
| El destinatario marcó el correo como spam | `marked_as_spam` | El destinatario denunció el correo. | No lo vuelvas a enviar. |
| No se pudo enviar el correo | `send_failed` | El proveedor rechazó el envío o el fallo no coincide con ningún otro código. | Vuelve a enviarlo. |
| No enviado: se agotó el límite semanal de correos del modo de prueba | `test_mode_quota_spent` | Se agotó el [límite del modo de prueba](#test-mode) semanal. | Espera a que se restablezca el límite. |

Cinco de estos motivos requieren una dirección diferente al volver a enviar el correo, porque la misma dirección volvería a fallar: el buzón no existe, el servidor de correo rechazó la dirección, la dirección se bloqueó después de fallos anteriores, el mensaje se rechazó por ser demasiado grande y el destinatario marcó el correo como spam.

## Leer un correo

Para leer un correo, selecciona **Resend** en su fila o **Retry** en una fila con error. El panel que se abre muestra la copia almacenada en **Vista previa del correo**, exactamente como se envió. Los correos de recuperación y dunning que escribiste incluyen la etiqueta **Escrito por ti**.

<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="El contenido almacenado del correo, tal como lo recibió el cliente" style={{ maxHeight: '500px', width: 'auto' }} width="824" height="1148" data-path="images/email-logs/email-preview.png" />
</Frame>

Algunos correos no tienen contenido que mostrar:

* **Correos de inicio de sesión de Customer Portal.** Incluyen un enlace de inicio de sesión activo, por lo que el contenido nunca se muestra.
* **Correos bloqueados.** Nunca llegaron al proveedor, por lo que no existe ninguna copia.
* **Correos que no se pudieron entregar al proveedor.** No se almacenó ninguna copia.
* **Correos de más de 180 días.** El proveedor elimina el contenido en ese momento.

## Volver a enviar un correo

Para volver a enviar un correo, selecciona **Resend** en su fila o **Retry** en una fila con error y confirma en el panel. El botón muestra cuántos reenvíos le quedan al correo. Dodo Payments reconstruye el correo a partir del evento original, no de la copia almacenada, por lo que un recibo muestra el estado actual del pago. El correo conserva la fecha del evento original.

<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="El control para volver a enviar un correo en una fila, con la opción de enviarlo a otra dirección" style={{ maxHeight: '500px', width: 'auto' }} width="896" height="2104" data-path="images/email-logs/resend-email.png" />
</Frame>

El campo **To** del panel contiene la dirección original. Para enviar el correo a otra dirección, cámbiala. Después de un fallo permanente, el campo **To** aparece vacío y debes introducir una dirección diferente, porque la original volvería a fallar.

<Warning>
  Volver a enviar un correo crea un correo nuevo. El cliente recibe otra copia y el reenvío aparece como una fila independiente en la pestaña.
</Warning>

### Límites

Estos límites se aplican a cada reenvío:

* Cada correo puede volver a enviarse **tres veces**.
* Los reenvíos de un correo a la misma dirección deben esperar entre intentos: cinco minutos después del último envío antes del primer reenvío, diez antes del segundo y quince antes del tercero.
* Un reenvío a cualquier dirección debe esperar hasta que hayan transcurrido cinco minutos desde la última vez que esa dirección recibió un correo tuyo.
* Un envío que nunca llegó al proveedor no cuenta para los tres reenvíos, pero sí se suma al tiempo de espera.
* La opción Resend solo está disponible en el dashboard. La API es de solo lectura.

### Cuándo no está disponible Resend

El dashboard no ofrece la opción de volver a enviar un correo o la rechaza en los siguientes casos:

| Caso | Motivo |
| - | - |
| El destinatario marcó el correo electrónico como spam | El destinatario solicitó dejar de recibir estos correos electrónicos. |
| La dirección está suprimida | El proveedor acepta el envío a esa dirección y luego lo descarta. Introduce una dirección diferente. |
| Ya se envió un envío posterior del mismo correo electrónico | Esta fila es histórica y está marcada como **Enviado en un intento posterior**. Volver a enviarlo entregaría una segunda copia. |
| El cliente está bloqueado | Un [cliente bloqueado](/features/customer-blocklist) no recibe más correos electrónicos de tu parte. |
| Se utilizaron los tres reenvíos | El límite es por correo electrónico. |
| Los datos originales ya no están disponibles | Dodo Payments no puede reconstruir el correo electrónico. |
| El rol de tu equipo es **Viewer** | Los usuarios Viewer no ven ninguna acción de reenvío en la fila. |
| **Test Mode Emails** está desactivado, en modo de prueba | Los correos electrónicos de clientes en modo de prueba están desactivados para tu empresa. Consulta [Test Mode](#test-mode). |

<Note>
  Un correo de inicio de sesión de Customer Portal siempre se envía a la dirección que lo solicitó y cada reenvío crea un enlace de inicio de sesión nuevo.
</Note>

## Modo de prueba

El modo de prueba envía correos electrónicos reales, por lo que tiene un límite: **100 correos electrónicos por empresa y por semana**. Los reenvíos utilizan el mismo límite. Cada correo electrónico en modo de prueba se envía al destinatario real, con `[TEST MODE]` al principio del asunto.

Para detener los correos electrónicos de clientes en modo de prueba, desactiva **Test Mode Emails** en **Settings → Communication → Email** (consulta [Test Mode Emails](/features/communication-preferences#test-mode-emails)). Mientras esté desactivado, no se enviará ningún correo electrónico a clientes en modo de prueba, no se añadirá ninguna fila a la pestaña, no se consumirá ningún límite y el dashboard rechazará los reenvíos. Los correos electrónicos del modo activo no se ven afectados.

Cuando se agota el límite, no se envía nada más en modo de prueba durante esa semana. El primer correo electrónico rechazado esa semana se registra como una fila `blocked`, que muestra "No enviado: se agotó el límite de correos electrónicos en modo de prueba para esta semana". Los rechazos posteriores de la misma semana no añaden filas. El límite se restablece al comienzo de cada semana, el lunes. El modo activo no tiene este límite.

<Info>
  Los correos electrónicos de inicio de sesión de Customer Portal nunca se envían en modo de prueba y no consumen el límite.
</Info>

## Lectura de correos electrónicos mediante la API

La lista y el contenido también están disponibles mediante tu clave de API, por lo que puedes mostrar el estado de entrega en tus propias herramientas de soporte. La lista devuelve 10 correos electrónicos por página de forma predeterminada. Establece `page_size` para devolver hasta 100 y `page_number` para recorrer las páginas, comenzando en 0.

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

  ```typescript Node.js expandable theme={null}
  const customerId = 'cus_123'; // the customer whose emails you want to read
  const res = await fetch(
    `https://live.dodopayments.com/customers/${customerId}/emails?page_size=10`,
    { headers: { Authorization: `Bearer ${process.env.DODO_PAYMENTS_API_KEY}` } },
  );
  const { items, total_count } = await res.json();
  ```

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

  customer_id = "cus_123"  # the customer whose emails you want to read
  res = requests.get(
      f"https://live.dodopayments.com/customers/{customer_id}/emails",
      params={"page_size": 10},
      headers={"Authorization": f"Bearer {os.environ['DODO_PAYMENTS_API_KEY']}"},
  )
  items = res.json()["items"]
  ```
</CodeGroup>

Los SDK de TypeScript y Python encapsulan ambos endpoints como `client.customers.emails.list()` y `client.customers.emails.retrieveBody()` (`retrieve_body()` en Python).

Cada elemento incluye su `email_log_id`, que pasas al endpoint de contenido, y su `status`. También incluye `failure_code` y `failure_reason` cuando el envío falla, además de `has_preview` para indicar si existe contenido almacenado. El endpoint de contenido devuelve `422` cuando un correo electrónico no tiene contenido para mostrar. Cada elemento también incluye un objeto `policies` que indica qué puedes hacer con la fila:

| Campo | Significado |
| - | - |
| `resend_allowed` | El correo electrónico se envió o se entregó, y puedes volver a enviarlo. |
| `retry_allowed` | El envío falló y puedes intentarlo de nuevo. |
| `resends_remaining` | Cuántos reenvíos le quedan al correo electrónico. |
| `requires_different_address` | La misma dirección volvería a fallar, por lo que debes proporcionar otra. |
| `superseded` | Un envío posterior del mismo correo electrónico reemplazó esta fila. |

Lee `policies` en lugar de deducir la elegibilidad por tu cuenta. El servidor aplica las reglas anteriores.

<CardGroup cols={2}>
  <Card title="Customer Management" icon="user-group" href="/features/customers">
    Administra clientes, historial de compras y acceso de autoservicio.
  </Card>

  <Card title="Communication Preferences" icon="bell" href="/features/communication-preferences">
    Elige qué correos electrónicos envía Dodo Payments en tu nombre.
  </Card>
</CardGroup>


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