Adjuntos
Adjuntos en POST /send-email — campo attachments (filename, url o content base64, contentType), tipos permitidos application/pdf y text/calendar, límites de 10 archivos / 10 MB y validación asíncrona vía Activity API.
La API de ReallyQuickEmails permite enviar correos con archivos adjuntos usando el endpoint POST /send-email. Los adjuntos se especifican en el campo attachments del cuerpo de la solicitud.
Estructura del adjunto
Cada elemento del arreglo attachments acepta los siguientes campos:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
filename | string | Sí | Nombre del archivo con extensión (ej. "factura.pdf"). |
url | string | Condicional | URL pública del archivo (HTTP o HTTPS). Requerido si no se usa content. |
content | string | Condicional | Contenido del archivo codificado en base64. Requerido si no se usa url. |
contentType | string | No | Tipo MIME del archivo. Se auto-detecta a partir de la extensión del filename si no se especifica. |
Cada adjunto debe incluir filename y exactamente uno de url o content.
Tipos permitidos
Solo se permiten los siguientes tipos MIME:
application/pdftext/calendar
Si el tipo MIME del archivo no coincide con uno de estos, el envío falla durante el procesamiento en segundo plano (ver la sección de validación más abajo).
Limites
| Límite | Valor |
|---|---|
| Cantidad máxima de adjuntos | 10 por correo |
| Tamaño máximo por archivo | 10 MB |
| Tamaño máximo total | 10 MB |
Adjuntos por URL
Cuando se usa el campo url, el servidor descarga el archivo antes de enviarlo. Se aplican las siguientes medidas de seguridad:
- Solo HTTP/HTTPS: Otros esquemas de URL son rechazados.
- Protección SSRF: Las URLs que apuntan a direcciones IP privadas o reservadas son bloqueadas.
- Timeout: La descarga tiene un tiempo límite de 30 segundos. Si el servidor remoto no responde a tiempo, el envío falla.
Adjuntos por base64
Cuando se usa el campo content, el valor debe ser el contenido del archivo codificado en base64 sin prefijos (sin data:...;base64,). Solo el string base64 crudo.
Validación asíncrona
El endpoint /send-email es asíncrono: la respuesta HTTP confirma que el correo quedó encolado, pero los adjuntos se descargan y validan en segundo plano. Si un adjunto excede los límites, tiene un tipo MIME no permitido o su URL no es accesible, el envío falla de forma asíncrona y queda registrado en el historial de actividad (current_status: "failed", con el detalle en error_message).
Para confirmar el resultado, consulta la Activity API con el email_id de la respuesta, o suscríbete a webhooks.
Ejemplos
Adjunto por URL
curl -X POST https://api.reallyquickemails.com/send-email \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
-d '{
"recipient": "cliente@ejemplo.com",
"sender": "ventas@mitienda.com",
"senderName": "Mi Tienda",
"subject": "Tu factura de octubre",
"html": "<p>Adjuntamos tu factura de octubre.</p>",
"attachments": [
{
"filename": "factura-octubre-2026.pdf",
"url": "https://storage.ejemplo.com/facturas/factura-octubre-2026.pdf"
}
]
}'Respuesta (el correo queda encolado; los adjuntos se procesan en segundo plano):
{
"success": true,
"queued": true,
"jobId": "email-1780676307345-6da66195",
"email_id": "d116a543-9b13-41b4-93cf-647539018275",
"activityId": "d116a543-9b13-41b4-93cf-647539018275",
"message": "Email queued for sending"
}Adjunto por base64
curl -X POST https://api.reallyquickemails.com/send-email \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
-d '{
"recipient": "cliente@ejemplo.com",
"sender": "ventas@mitienda.com",
"senderName": "Mi Tienda",
"subject": "Invitación a reunión",
"html": "<p>Te invitamos a una reunion de equipo.</p>",
"attachments": [
{
"filename": "reunion.ics",
"content": "QkVHSU46VkNBTEVOREFSClZFUlNJT046Mi4wCkJFR0lOOlZFVkVOVApEVFNUQVJUOjIwMjUxMDE2VDE1MDAwMFoKRFRFTkQ6MjAyNTEwMTZUMTYwMDAwWgpTVU1NQVJZOlJldW5pb24gZGUgZXF1aXBvCkVORDpWRVZFTlQKRU5EOlZDQUxFTkRBUg==",
"contentType": "text/calendar"
}
]
}'Multiples adjuntos
curl -X POST https://api.reallyquickemails.com/send-email \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_proj_xxxxxxxxxxxx" \
-d '{
"recipient": "cliente@ejemplo.com",
"sender": "ventas@mitienda.com",
"senderName": "Mi Tienda",
"subject": "Documentos del proyecto",
"html": "<p>Adjuntamos el contrato y la agenda de la reunion.</p>",
"attachments": [
{
"filename": "contrato.pdf",
"url": "https://storage.ejemplo.com/docs/contrato.pdf"
},
{
"filename": "agenda.ics",
"content": "QkVHSU46VkNBTEVOREFSClZFUlNJT046Mi4wCkVORDpWQ0FMRU5EQVI=",
"contentType": "text/calendar"
}
]
}'La respuesta tiene la misma estructura queued del primer ejemplo. El campo attachments no se valida en la respuesta HTTP — revisa el estado final con la Activity API.