guía · API de SendGrid
¿Cómo debería implementar un equipo de producto la API de SendGrid de forma segura?
Implemente la API de SendGrid detrás de un servicio de correo del lado del servidor, con un dominio de envío autenticado y una clave de API limitada al permiso Mail Send. Valide cada mensaje antes de llamar a `POST /v3/mail/send`, persista su propio registro de envío y capture el `X-Message-ID` de la respuesta. Procese los payloads firmados del Event Webhook a partir de sus bytes sin procesar, elimine los eventos duplicados y respete los rebotes, los reportes de spam y las bajas. Trate `202 Accepted`, la entrega al servidor receptor y la llegada a la bandeja de entrada como estados separados, con reintentos acotados solo para los fallos transitorios.
Defina un trabajo de envío acotado y legítimo
La v3 Mail Send API de SendGrid es un endpoint del proveedor para el correo saliente, no un buzón de usuario de uso general. Colóquela detrás de un servicio de aplicación de confianza o de un worker de cola, y defina qué eventos del producto pueden crear mensajes, como la verificación de una cuenta, un recibo, un aviso de seguridad o una notificación solicitada. No exponga la clave del proveedor a navegadores, clientes móviles, plantillas, prompts ni registros. Separe los mensajes transaccionales de las campañas que dependen del consentimiento a nivel del modelo de datos, para que las expectativas de los destinatarios, la gestión de preferencias y la reputación puedan operarse de forma independiente. Antes de implementar, decida quién es el propietario del dominio remitente, quién aprueba las plantillas, qué entornos pueden enviar al exterior y qué destinatarios están permitidos en desarrollo. Este alcance se convierte en el límite para los permisos de las claves de API, la configuración del dominio, los registros de auditoría, las alertas y la respuesta ante incidentes. También hace posible una migración de proveedor, porque el código del producto solicita una operación de correo aprobada en lugar de construir solicitudes arbitrarias a SendGrid por toda la aplicación.
Autentique un dominio de envío dedicado
Configure Domain Authentication de SendGrid para un dominio o un subdominio específico que usted controle, y luego publique exactamente los registros DNS generados para esa identidad y verifíquelos en SendGrid. La documentación del proveedor señala que los subdominios no heredan una identidad autenticada del dominio padre, así que verifique el dominio que realmente se usa en las direcciones From. Revise los registros SPF y DMARC existentes antes de cambiar el DNS; no cree una segunda política SPF para el mismo nombre de host ni sustituya la política DMARC existente de una organización sin su propietario. Mantenga el tráfico transaccional y el promocional en identidades elegidas de forma deliberada cuando sus audiencias y sus riesgos sean distintos. Confirme en un mensaje de prueba recibido la dirección From visible, el return path, el dominio de firma DKIM, la ruta de respuesta y el comportamiento del link branding. La autenticación establece una identidad autorizada y señales de alineación, pero no determina la carpeta final en el sistema receptor. Siga monitoreando los rebotes, las quejas, las expectativas de los destinatarios y el contenido una vez superada la verificación DNS.
Emita claves de API de privilegio mínimo por entorno
Cree una clave de API de tipo Custom Access solo con los permisos que necesita la carga de trabajo, normalmente el acceso a Mail Send para un worker de envío. No otorgue a un remitente rutinario Full Access a plantillas, supresiones, compañeros de equipo, estadísticas, configuración de IP ni administración de la cuenta. Use claves separadas para desarrollo, staging y producción, con nombres que identifiquen el servicio propietario y el propósito de la rotación. SendGrid muestra una clave nueva una sola vez, así que colóquela directamente en el gestor de secretos del entorno y nunca la copie en el control de versiones ni en un documento compartido. En tiempo de ejecución, léala desde una configuración respaldada por secretos y pásela solo en el encabezado `Authorization: Bearer` a través de HTTPS. Pruebe la rotación de claves como una secuencia operativa: cree un reemplazo con permisos igual de acotados, despliegue el reemplazo, verifique que el tráfico controlado funciona y luego revoque la clave antigua. Configure alertas para las respuestas 401 o 403 inesperadas, porque pueden indicar una clave ausente, una credencial revocada, un permiso que no coincide o un cambio de configuración inseguro.
Construya y registre cada solicitud de Mail Send
Cree un registro saliente interno antes de contactar con SendGrid. Asígnele una clave estable de evento de la aplicación, el inquilino, la identidad del remitente, los destinatarios aprobados, la clase de mensaje, la versión de la plantilla y el estado. Construya el payload del proveedor a partir de ese registro usando `personalizations`, `from`, `subject` y al menos una parte de contenido admitida o una plantilla dinámica aprobada. Valide la sintaxis de las direcciones, el número de destinatarios, el tamaño de los adjuntos, los datos de la plantilla y los encabezados personalizados antes de la llamada de red. La descripción general actual de Mail Send de SendGrid limita el tamaño total de la solicitud, adjuntos incluidos, a menos de 30 MB, y el total de destinatarios entre To, Cc y Bcc a un máximo de 1.000. Las solicitudes más pequeñas y con un propósito específico son más fáciles de auditar y recuperar. Ante una respuesta `202 Accepted`, capture el encabezado `X-Message-ID` y asócielo al registro saliente. No ponga datos personales en categories ni en unique arguments; SendGrid advierte que esos valores pueden conservarse y consultarse fuera de las protecciones que se esperan para el contenido del mensaje.
Verifique y procese el Event Webhook
Configure el Event Webhook de SendGrid en un endpoint HTTPS que pueda conservar el cuerpo de la solicitud sin procesar. Habilite la firma criptográfica, OAuth 2.0 o ambos. En las entregas firmadas, verifique la marca de tiempo y `X-Twilio-Email-Event-Webhook-Signature` frente a los bytes exactos sin procesar antes de analizar el JSON; Twilio advierte que volver a serializar el payload puede cambiar los bytes e invalidar la verificación. Rechace las entradas no autenticadas, aplique un límite razonable al tamaño de la solicitud e impida las repeticiones según la política de marcas de tiempo que elija el equipo. Tras la verificación, ponga en cola o guarde de forma duradera el lote de eventos antes de devolver una respuesta de éxito. Elimine duplicados con `sg_event_id` y luego correlacione `sg_message_id`, el `X-Message-ID` guardado y un valor de correlación interno no sensible. Haga que las transiciones de estado sean monótonas, para que un evento processed demorado no pueda sobrescribir un resultado posterior de entrega o de rebote. Conserve el evento original del proveedor en un almacenamiento restringido para la resolución de problemas, pero minimice la retención de direcciones, textos de respuesta y datos de interacción a lo que realmente exijan el producto y la política.
Modele con precisión la aceptación, la entrega y la ubicación
El HTTP `202 Accepted` de SendGrid significa que la solicitud se aceptó y se puso en cola para su procesamiento. No indica que el destino haya aceptado el mensaje. Un evento de webhook `processed` significa que SendGrid aceptó el mensaje y puede intentar entregarlo. Un evento `delivered` significa que SendGrid informa de que el servidor de correo receptor lo aceptó, a menudo con una respuesta SMTP. Eso tampoco establece la llegada a la bandeja de entrada, porque el sistema receptor puede clasificar el correo aceptado en una pestaña de la bandeja de entrada, en cuarentena, en la carpeta de correo no deseado u otra ubicación. Mantenga estos estados separados en el almacenamiento y en las interfaces de usuario: solicitado, aceptado por el proveedor, procesado, aplazado, aceptado por el servidor receptor, rebotado, descartado, con queja o suprimido. Evite traducir cualquier respuesta HTTP sin error como «entregado». Las señales de interacción, como las aperturas, tampoco son prueba de entrega y pueden verse afectadas por las funciones de privacidad. Unos nombres de estado precisos hacen más seguras las investigaciones de soporte, los reintentos y las decisiones de entregabilidad.
Clasifique los fallos antes de reintentar
Gestione los errores del proveedor por clase en lugar de reintentar cualquier respuesta distinta de 202. Un 400 normalmente requiere corregir el payload, el remitente, los datos de la plantilla o los encabezados reservados. Un 401 apunta a la autenticación; un 403 puede indicar permisos insuficientes o una política de la cuenta; un 413 exige reducir el tamaño del mensaje. SendGrid documenta encabezados de límite de frecuencia por endpoint y devuelve 429 cuando se agota la asignación del periodo de renovación, así que espere hasta la hora de restablecimiento y agregue jitter en lugar de crear reintentos sincronizados. Reintente los errores 5xx y los fallos de transporte con backoff exponencial, un número finito de intentos y una alerta operativa. Los tiempos de espera ambiguos requieren un cuidado especial: el proveedor puede haber aceptado la solicitud aunque el cliente no recibiera la respuesta. Mantenga el registro saliente en un estado desconocido, busque eventos correlacionados y exija una regla de conciliación deliberada antes de reenviar. Las API de los proveedores no eliminan la necesidad de prevenir duplicados a nivel de producto. Nunca reintente un rebote permanente conocido, un destinatario no válido, una baja o un destino con reporte de spam como si fuera un error transitorio de infraestructura.
Respete las supresiones y las decisiones de los destinatarios
Incorpore los eventos bounce, dropped, spam report, unsubscribe y group unsubscribe a un modelo de seguridad de los destinatarios. SendGrid admite supresiones globales y grupos de baja para distintas clases de mensajes. Asocie cada mensaje promocional u opcional con el grupo correcto, ofrezca una vía de preferencias comprensible y detenga los envíos cuando se aplique la supresión correspondiente. No use las opciones para eludir supresiones como técnica habitual de entrega. Un mensaje crítico para el producto puede necesitar una política legal y operativa documentada por separado, pero esa política no debería anular en silencio la decisión de una persona sobre el correo promocional ni una salvaguarda de reputación del proveedor. Proteja las herramientas de soporte que eliminan una supresión con una autorización sólida, un motivo visible y un registro de auditoría. Haga un seguimiento separado de los fallos de entrega permanentes y temporales, y revise cualquier reactivación manual antes del siguiente envío. Estos controles protegen a los destinatarios y reducen los intentos repetidos hacia destinos que ya rechazaron o declinaron el tráfico. También evitan que el envío transaccional herede comportamientos inseguros de las campañas.
Pruebe todo el ciclo de vida antes del tráfico de producción
Empiece con una clave de SendGrid que no sea de producción y un subdominio autenticado controlado. Verifique el DNS y luego envíe variantes en texto sin formato y en HTML a bandejas de entrada propiedad del equipo. Confirme la respuesta `202` y el `X-Message-ID`, y verifique que los eventos firmados del webhook se correlacionan con el registro saliente local. Ejercite las rutas de payload no válido, clave revocada, permiso ausente, adjunto demasiado grande, límite de frecuencia, aplazamiento, rebote, descarte y evento duplicado sin usar direcciones reales de clientes. Confirme que la verificación del webhook rechaza un cuerpo modificado y que el manejador solo acusa recibo después de la captura duradera. Pruebe la rotación de claves, la reversión de plantillas, la aplicación de supresiones y un tiempo de espera ambiguo del cliente. Agregue paneles para los fallos de solicitud, el retraso de los eventos, los aplazamientos, los rebotes, los reportes de spam y los fallos de firma del webhook, con identificadores de inquilino y de mensaje, pero sin credenciales ni contenido completo. Por último, revise la documentación actual de SendGrid y los límites de la cuenta en el momento del lanzamiento, porque los derechos del plan, las funciones regionales, las cuotas y las políticas del proveedor pueden cambiar con independencia del código de la aplicación.
Compare las dependencias específicas del proveedor
Una integración directa con SendGrid es apropiada cuando un equipo depende deliberadamente de campos de solicitud, plantillas, controles de cuenta, formatos de webhook, supresiones y propiedad operativa específicos de SendGrid. La documentación pública de SendHQ describe una API de correo electrónico con alcance por espacio de trabajo con envío desde dominios verificados, correo entrante, plantillas alojadas, eventos de entrega, supresiones y un panel web. Antes de migrar, revise los payloads, eventos, controles de identidad, supresiones, requisitos regionales e identificadores de proveedor almacenados de ambos proveedores.
Preguntas frecuentes
¿Un 202 Accepted de SendGrid significa que el correo se entregó?
No. Significa que SendGrid aceptó la solicitud de API para procesarla. Use los eventos de entrega del Event Webhook para saber si el servidor receptor aceptó el mensaje, y trate la llegada a la bandeja de entrada como un resultado aparte que la respuesta de la API no establece.
¿Qué permiso debería tener una clave de envío de SendGrid?
Use una clave de tipo Custom Access limitada a la capacidad Mail Send que requiere el worker. Evite Full Access para el envío rutinario y use claves separadas, gestionadas como secretos, para desarrollo, staging, producción, administración y cualquier otra carga de trabajo con una autoridad sustancialmente distinta.
¿Cómo se debe verificar la firma del Event Webhook de SendGrid?
Conserve el cuerpo HTTP exacto sin procesar, lea los encabezados de firma y de marca de tiempo de Twilio y verifíquelos antes de analizar o volver a serializar el JSON. Aplique protección contra repeticiones, rechace las verificaciones fallidas y luego guarde de forma duradera o ponga en cola el lote de eventos antes de acusar recibo de la entrega.
¿Debe un producto reintentar todas las solicitudes de Mail Send fallidas?
No. Corrija los errores de payload, autenticación, autorización, tamaño y destinatario permanente en lugar de reintentarlos. Retrase las respuestas 429 hasta el restablecimiento documentado, reintente los fallos transitorios de red y 5xx con backoff acotado, y concilie los tiempos de espera ambiguos antes de reenviar.
¿Se pueden eludir las supresiones de SendGrid para el correo transaccional?
SendGrid ofrece controles para eludirlas, pero un producto no debería usarlos de forma rutinaria. Separe las clases de mensajes, respete la baja o la supresión aplicable y exija una autorización documentada e historial de auditoría para cualquier reactivación excepcional o decisión de envío basada en una política específica.
¿Qué debe evaluar un equipo antes de comparar SendGrid y SendHQ?
Compare los payloads, eventos, controles de identidad, supresiones, requisitos regionales e identificadores de proveedor almacenados antes de planificar una migración.
Fuentes
- Descripción general de la Mail Send API — Twilio SendGrid
- Endpoint de Mail Send — Twilio SendGrid
- Claves de API de SendGrid — Twilio SendGrid
- Configurar la autenticación de dominios — Twilio SendGrid
- Descripción general del Event Webhook de Twilio SendGrid — Twilio SendGrid
- Referencia del Event Webhook — Twilio SendGrid
- Funciones de seguridad del Event Webhook — Twilio SendGrid
- Límites de frecuencia de la API de SendGrid — Twilio SendGrid
- Supresiones de SendGrid — Twilio SendGrid
- La API de SendGrid devuelve 202 Accepted pero no envía el correo — Centro de ayuda de Twilio
- X-Message-ID — Twilio SendGrid
- Contrato OpenAPI de SendHQ — SendHQ