# Cabeceras y respuestas SMTP

> Qué cabeceras añade, reescribe o elimina Emailit en el correo enviado por SMTP, cómo leer los ID de los emails en la respuesta 250 y cómo añadir tú mismo List-Unsubscribe.

Emailit retransmite casi sin cambios el mensaje MIME que envías por SMTP, pero modifica algunas cabeceras para que el mensaje supere la autenticación y se pueda hacer su seguimiento. Esta página enumera esos cambios, explica la respuesta `250` que contiene los nuevos ID de los emails y describe las cabeceras que tienes que añadir tú.

## Cabeceras que Emailit añade o reescribe

| Cabecera | Qué hace Emailit |
| --- | --- |
| `Received` | Añade cabeceras de traza para el relay y para el servidor de correo de Emailit que entrega el mensaje. |
| `Message-ID` | Sustituye el tuyo por `<token@your-domain>`, donde el dominio es el de tu dirección del remitente. La copia de cada destinatario recibe su propio Message-ID. |
| `Date` | La establece cuando Emailit procesa el mensaje por primera vez para entregarlo. |
| `Subject` | Lo reescribe a partir del asunto decodificado y vuelve a codificar los caracteres no ASCII. |
| `Return-Path` | Establece una dirección de rebote en tu subdominio de return-path, `emailit.<your-domain>`. Se usa la misma dirección como remitente del sobre, así que SPF se supera para tu dominio. |
| `X-Emailit-ID` | Añade el token del email. |
| `Feedback-ID` | Añade un identificador que los proveedores de correo usan en los informes de quejas. |
| `DKIM-Signature` | Firma el mensaje con la clave DKIM de tu dominio (selector `emailit` por defecto). Se puede añadir una segunda firma para `emailitmail.com` para los feedback loops de quejas. |

La firma DKIM cubre, entre otras, las cabeceras `From`, `To`, `Cc`, `Subject`, `Date`, `Message-ID`, `Reply-To`, MIME y `List-*`. No modifiques un mensaje después de que Emailit lo haya firmado, por ejemplo con una lista de correo que reescribe el asunto, o la firma fallará.

## Cabeceras que Emailit elimina

| Cabecera | Cuándo |
| --- | --- |
| `Bcc` | Siempre, para que los destinatarios en CCO sigan ocultos. |
| `Reply-To` | Cuando indica la misma dirección que `From`. Algunos filtros de spam penalizan un Reply-To redundante. |
| `Content-Disposition` | En el nivel superior del mensaje. Las partes de los adjuntos conservan la suya. |

Todo lo demás, incluidas tus propias cabeceras `X-`, se entrega sin cambios.

## Las cabeceras de control no se leen por SMTP

> **Usa la API para controlar cada email:** El SMTP relay no lee ninguna cabecera `X-Emailit-*`. No puedes configurar el seguimiento, los metadatos, una plantilla ni una hora de envío con cabeceras. El seguimiento sigue la configuración **Track loads** y **Track clicks** del dominio de envío en **Email API → Domains**. Para controlar cada email por separado, usa la [API de email](/es/docs/email-api/send-email/).

No incluyas una cabecera `X-Emailit-ID` en los mensajes que envíes. Emailit la usa para reconocer los mensajes que ya ha procesado, y un mensaje que la lleva se salta la reescritura de cabeceras y la firma DKIM descritas más arriba.

## La respuesta 250

Cuando el relay acepta un mensaje, su respuesta al final de `DATA` enumera los ID de los emails de Emailit que ha creado, uno por destinatario:

```text
250 2.0.0 OK: queued as em_33VtK8mRq1xZp7LwN4cY2bHsDfa, em_33VtK8nB5rTq0YxW3mJk9PdLsUe
```

- `2.0.0` es el código de estado ampliado de éxito.
- Cada ID `em_` es el mismo ID que usan la API, el panel y los webhooks para el email de ese destinatario.
- La línea de respuesta tiene un límite de longitud. Si no caben todos los ID, lo que ocurre a partir de unos 15 destinatarios, la respuesta solo contiene el primer ID. Encuentra los demás en **Email API → Emails** o en los eventos de webhook.

La mayoría de las bibliotecas exponen la respuesta. En Nodemailer es `info.response`. En PHPMailer, llama a `$mail->getSMTPInstance()->getLastReply()` después de `send()`. Guarda el ID junto a tu propio registro, para poder asociar los [eventos de webhook](/es/docs/webhooks/event-types/) o buscar el email más adelante con [Obtener un email](/es/docs/api-reference/emails/get/).

## Añadir tú mismo List-Unsubscribe

Emailit solo añade las cabeceras `List-Unsubscribe` a los emails de [campaña](/es/docs/campaigns/). Si envías newsletters u otro correo masivo por SMTP, añade tú las dos cabeceras al mensaje:

```text
List-Unsubscribe: <https://acme.com/unsubscribe?u=881&l=digest>, <mailto:unsubscribe@acme.com?subject=unsubscribe-881>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
```

La URL `https` debe aceptar un `POST` con el cuerpo `List-Unsubscribe=One-Click` y dar de baja a la persona sin un paso de confirmación (RFC 8058). Emailit incluye las dos cabeceras en la firma DKIM, algo que Gmail y Yahoo exigen para la baja con un clic.

**Node.js**

```javascript
await transporter.sendMail({
  from: 'Acme <news@acme.com>',
  to: 'ada@example.com',
  subject: 'Acme weekly digest',
  html: '<p>This week at Acme…</p>',
  headers: {
    'List-Unsubscribe': '<https://acme.com/unsubscribe?u=881&l=digest>',
    'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click',
  },
});
```

**Python**

```python
msg["List-Unsubscribe"] = "<https://acme.com/unsubscribe?u=881&l=digest>"
msg["List-Unsubscribe-Post"] = "List-Unsubscribe=One-Click"
```

**PHP**

```php
$mail->addCustomHeader('List-Unsubscribe', '<https://acme.com/unsubscribe?u=881&l=digest>');
$mail->addCustomHeader('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click');
```

## Ver también

- [Configuración SMTP](/es/docs/smtp/settings/)
- [Cabeceras y metadatos](/es/docs/email-api/headers-and-metadata/) para los envíos por API
- [Cabeceras de email](/es/docs/dictionary/email-headers/)
- [Seguimiento de aperturas y clics](/es/docs/tracking/)

---
Fuente: https://emailit.com/es/docs/smtp/headers/
