API RESTful para envio de correos electronicos con soporte completo para hilos de conversacion, HTML, CC, BCC y adjuntos.
curl -X POST https://email-api.cubeark.dev/api/v1/email/send \
-H "Content-Type: application/json" \
-d '{"smtp": {...}, "to": [...], "subject": "Hola", "html_body": "<h1>Hola Mundo</h1>"}'
Soporte completo para contenido HTML con fallback automatico a texto plano.
Envia correos con destinatarios en copia y copia oculta.
Responde en el mismo hilo manteniendo el contexto de la conversacion.
Envia archivos adjuntos codificados en Base64 con tipos MIME personalizados.
Envia multiples correos en una sola peticion con configuracion compartida.
Configura diferentes servidores SMTP por cada request.
# Clonar repositorio
git clone https://github.com/abraham-developer/email-api.git
cd email-api
# Instalar dependencias
go mod download
# Ejecutar
go run cmd/server/main.go
# Construir imagen
docker build -t email-api:latest .
# Ejecutar contenedor
docker run -d -p 8080:8080 --name email-api email-api:latest
# Iniciar servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
# Detener
docker-compose down
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /api/v1/health |
Verificar estado del servicio |
| POST | /api/v1/email/send |
Enviar un correo electronico |
| POST | /api/v1/email/reply |
Responder en un hilo existente |
| POST | /api/v1/email/outlook-reply |
Responder en hilo (optimizado para Outlook) |
| POST | /api/v1/email/bulk |
Envio masivo de correos |
/api/v1/health
Verifica que el servicio este funcionando correctamente.
{
"status": "ok",
"message": "Email API is running",
"version": "1.0.0"
}
/api/v1/email/send
Envia un correo electronico con soporte para HTML, CC, BCC y adjuntos.
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
smtp |
SMTPConfig | Si | Configuracion del servidor SMTP |
to |
EmailAddress[] | Si | Lista de destinatarios |
cc |
EmailAddress[] | No | Destinatarios en copia |
bcc |
EmailAddress[] | No | Destinatarios en copia oculta |
subject |
string | Si | Asunto del correo |
html_body |
string | Si | Contenido HTML del correo |
text_body |
string | No | Texto plano alternativo |
reply_to |
EmailAddress | No | Direccion para respuestas |
attachments |
Attachment[] | No | Archivos adjuntos |
{
"success": true,
"message": "Correo enviado exitosamente",
"data": {
"success": true,
"message_id": "<[email protected]>",
"message": "Correo enviado exitosamente",
"sent_to": 1
}
}
/api/v1/email/reply
Responde a un correo existente manteniendo el hilo de conversacion.
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
original_message_id |
string | Si | Message-ID del correo original |
/api/v1/email/bulk
Envia multiples correos en una sola peticion con configuracion SMTP compartida.
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
smtp |
SMTPConfig | Si | Configuracion SMTP compartida |
emails |
EmailItem[] | Si | Array de correos a enviar |
{
"success": true,
"data": {
"total_sent": 2,
"total_failed": 0,
"results": [...]
}
}
Configuracion del servidor SMTP para el envio de correos.
interface SMTPConfig {
host: string; // Servidor SMTP (ej: smtp.gmail.com)
port: number; // Puerto (ej: 587)
username: string; // Usuario de autenticacion
password: string; // Contrasena o App Password
from_name?: string; // Nombre del remitente
from_email: string; // Email del remitente
use_tls?: boolean; // Usar TLS (recomendado: true)
}
Representa una direccion de correo electronico.
interface EmailAddress {
name?: string; // Nombre del contacto
address: string; // Direccion de email
}
Archivo adjunto codificado en Base64.
interface Attachment {
filename: string; // Nombre del archivo
content_type?: string; // Tipo MIME
content: string; // Contenido en Base64
}
curl -X POST https://email-api.cubeark.dev/api/v1/email/send \
-H "Content-Type: application/json" \
-d '{
"smtp": {
"host": "smtp.gmail.com",
"port": 587,
"username": "[email protected]",
"password": "tu-app-password",
"from_name": "Sistema",
"from_email": "[email protected]",
"use_tls": true
},
"to": [
{"name": "Juan Perez", "address": "[email protected]"}
],
"subject": "Prueba de correo",
"html_body": "<h1>Hola Juan</h1><p>Este es un correo de <strong>prueba</strong>.</p>"
}'
curl -X POST https://email-api.cubeark.dev/api/v1/email/send \
-H "Content-Type: application/json" \
-d '{
"smtp": {
"host": "smtp.gmail.com",
"port": 587,
"username": "[email protected]",
"password": "tu-password",
"from_email": "[email protected]",
"use_tls": true
},
"to": [
{"name": "Cliente", "address": "[email protected]"}
],
"cc": [
{"name": "Gerente", "address": "[email protected]"}
],
"bcc": [
{"address": "[email protected]"}
],
"subject": "Reporte Mensual",
"html_body": "<h2>Reporte</h2><p>Contenido del reporte.</p>"
}'
curl -X POST https://email-api.cubeark.dev/api/v1/email/reply \
-H "Content-Type: application/json" \
-d '{
"smtp": {
"host": "smtp.gmail.com",
"port": 587,
"username": "[email protected]",
"password": "tu-password",
"from_email": "[email protected]"
},
"original_message_id": "<[email protected]>",
"to": [
{"name": "Cliente", "address": "[email protected]"}
],
"subject": "Reporte Mensual",
"html_body": "<p>Gracias por tu mensaje. Aqui esta la informacion adicional.</p>"
}'
curl -X POST https://email-api.cubeark.dev/api/v1/email/bulk \
-H "Content-Type: application/json" \
-d '{
"smtp": {
"host": "smtp.gmail.com",
"port": 587,
"username": "[email protected]",
"password": "tu-password",
"from_email": "[email protected]"
},
"emails": [
{
"to": [{"address": "[email protected]"}],
"subject": "Oferta especial",
"html_body": "<p>Oferta personalizada para ti</p>"
},
{
"to": [{"address": "[email protected]"}],
"subject": "Oferta especial",
"html_body": "<p>Oferta personalizada para ti</p>"
}
]
}'
curl -X POST https://email-api.cubeark.dev/api/v1/email/send \
-H "Content-Type: application/json" \
-d '{
"smtp": {
"host": "smtp.gmail.com",
"port": 587,
"username": "[email protected]",
"password": "tu-password",
"from_email": "[email protected]",
"use_tls": true
},
"to": [
{"address": "[email protected]"}
],
"subject": "Documento adjunto",
"html_body": "<p>Te envio el documento solicitado.</p>",
"attachments": [
{
"filename": "documento.pdf",
"content_type": "application/pdf",
"content": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL..."
}
]
}'
Host: smtp.gmail.com
Puerto: 587
TLS: Si
Host: smtp.office365.com
Puerto: 587
TLS: Si
Host: smtp.sendgrid.net
Puerto: 587
Usuario: apikey
Password: Tu API Key
Yahoo: smtp.mail.yahoo.com:587
Mailgun: smtp.mailgun.org:587
Amazon SES: email-smtp.[region].amazonaws.com:587
La respuesta aparecera aqui...