AutoMail — envío por Gmail SMTP
Mini API PHP en el host lu-zero que envía correos con plantilla primordial vía Gmail SMTP (smtp.gmail.com:587). Soporta adjuntos opcionales en base64. No está en este servidor (wiki); vive en automail.lu-zero.ldeluipy.es.
Resumen
- Docs públicas: https://automail.lu-zero.ldeluipy.es/
- Endpoint:
POST https://automail.lu-zero.ldeluipy.es/api/send.php - Document root (lu-zero):
/var/www/automail.lu-zero.ldeluipy.es - Secretos:
private/config.php(Apache:Require all deniedenprivate/ylib/)
Autenticación
Una de estas cabeceras (mismo token):
Authorization: Bearer TU_API_KEYX-API-Token: TU_API_KEY
Comparación con hash_equals. Sin token o incorrecto → 401.
Importante: no pongas el token real en la wiki, en git ni en páginas públicas. Léelo en el servidor desde private/config.php (api_token).
Cuerpo JSON
Campos principales:
to— destinatario (también aceptamail/email)subject— asunto (tambiénasunto)text— texto plano (tambiénbody/texto); se convierte a HTML seguro en la plantillahtml— HTML propio (se sanea: sin scripts, iframes ni eventos JS) y se inserta en la plantillaattachments— opcional (tambiénfiles/adjuntos): array de adjuntos en base64
La API envía siempre multipart (texto + HTML). Con adjuntos usa multipart/mixed envolviendo el alternative.
{
"to": "mail@ejemplo.com",
"subject": "Hola",
"text": "hola que tal"
}
{
"to": "mail@ejemplo.com",
"subject": "Resumen",
"html": "<p>hola que tal</p>"
}
Adjuntos
Cada elemento del array:
filename(obligatorio) — nombre seguro (sin rutas; se sanea en el servidor)content(obligatorio) — contenido en base64mime(opcional) — si falta, se infiere por extensión; si no se puede, se rechaza
Límites (configurables en private/config.php → attachments):
- Máximo 5 adjuntos por correo
- ~5 MB por fichero (decodificado)
- ~8 MB totales (decodificados)
- MIME allowlist:
application/pdf,text/plain,text/csv,image/png,image/jpeg,application/zip
Base64 inválido, tamaño excedido o MIME no permitido → 400 con mensaje claro. Sin adjuntos el contrato anterior no cambia.
{
"to": "mail@ejemplo.com",
"subject": "CV adjunto",
"text": "Te envío el CV en PDF.",
"attachments": [
{
"filename": "cv_ejemplo.pdf",
"mime": "application/pdf",
"content": "<BASE64>"
}
]
}
Ejemplo curl
curl -sS -X POST 'https://automail.lu-zero.ldeluipy.es/api/send.php' \
-H 'Authorization: Bearer TU_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"to":"mail@ejemplo.com","subject":"Hola","text":"hola que tal"}'
Con PDF:
B64=$(base64 -w0 archivo.pdf)
curl -sS -X POST 'https://automail.lu-zero.ldeluipy.es/api/send.php' \
-H 'Authorization: Bearer TU_API_KEY' \
-H 'Content-Type: application/json' \
-d "{\"to\":\"mail@ejemplo.com\",\"subject\":\"CV\",\"text\":\"Adjunto PDF\",\"attachments\":[{\"filename\":\"cv.pdf\",\"mime\":\"application/pdf\",\"content\":\"$B64\"}]}"
Respuestas
200—{"ok":true,"to":"...","subject":"..."}; con adjuntos tambiénattachments_countyattachments(lista de filenames, sin base64)400— JSON, campos, base64, MIME o límites incorrectos401— token inválido o ausente405— método distinto de POST500— fallo SMTP (revisar logs en lu-zero)
Gmail (servidor)
En Google Account → Seguridad → 2FA → Contraseñas de aplicaciones. Esa App Password va en private/config.php como smtp.password (sin espacios). Remitente = misma cuenta Gmail (smtp.username / from_address).
No documentes aquí la App Password ni el token; solo en el servidor o en un gestor de secretos.
Dónde está
Host lu-zero (lu-zero.ldeluipy.es), no este VPS de la wiki. Vhost Apache típico: automail.lu-zero.ldeluipy.es.conf.