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:

CampoTipoRequeridoDescripción
filenamestringNombre del archivo con extensión (ej. "factura.pdf").
urlstringCondicionalURL pública del archivo (HTTP o HTTPS). Requerido si no se usa content.
contentstringCondicionalContenido del archivo codificado en base64. Requerido si no se usa url.
contentTypestringNoTipo 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/pdf
  • text/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ímiteValor
Cantidad máxima de adjuntos10 por correo
Tamaño máximo por archivo10 MB
Tamaño máximo total10 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

bash
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):

json
{
  "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

bash
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

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