Docs / SDK / C / Mail

C — módulo Mail

🚧 En proceso de liberación  Todavía no implementado en el SDK de C. El contrato completo (entry points, tipos de datos, ejemplos que sí compilan) ya está fijado en el módulo equivalente de Go — úsalo como referencia mientras se completa este port.

Contrato ya fijado (stub)

mail.h / mail.c ya existen en el repositorio con las mismas structs que el SDK de Go — wa_mail_send() y wa_mail_status() siempre devuelven -1 todavía; la capa de transporte HTTP (webability_api.h/.c) ya está implementada (la usa el módulo DNS, que sí es real), solo falta conectar wa_mail_send/wa_mail_status a ella.

#include "mail.h"

wa_mail_send_request_t req = {
    .from = { .email = "no-reply@tuempresa.com" },
    .to   = { .email = "cliente@ejemplo.com" },
    .template = NULL,
    .subject = "Confirma tu compra",
    .html = "Hola {{nombre}}",
    .wait_send = 1,
};
wa_mail_send_result_t result;
wa_mail_send(&api, &req, &result);
/* result.queue_status: WA_QUEUE_STATUS_PENDING | _PROCESSING | _SENT | _ERROR */

wa_mail_status_result_t status;
wa_mail_status(&api, result.queue_key, &status);

/* O con una plantilla ya registrada, en vez de subject/html/text: */
wa_mail_send_request_t req2 = {
    .from = { .email = "no-reply@tuempresa.com" },
    .to   = { .email = "cliente@ejemplo.com" },
    .template = "recuperacion",
};
wa_mail_send_result_t result2;
wa_mail_send(&api, &req2, &result2);

/* Con idioma: busca "recuperacion_fr" ya traducida, o auto-traduce/usa el base */
wa_mail_send_request_t req3 = {
    .from = { .email = "no-reply@tuempresa.com" },
    .to   = { .email = "cliente@ejemplo.com" },
    .template = "recuperacion",
    .lang = "fr",
};
wa_mail_send_result_t result3;
wa_mail_send(&api, &req3, &result3);

El campo template (const char *, NULL o "" si no aplica) es el id de una plantilla ya registrada, activa y de tipo email (no un "layout" — se rechaza con 1 si lo intentas) — el servidor valida esto antes de encolar el correo y responde con error (no un envío fallido en segundo plano) si no. lang (const char *, NULL/"" si no aplica) es un código BCP-47 ("fr", "en", "de"…): nunca hace fallar el envío, en el peor caso degrada al idioma base. Ver Con plantilla registrada y Plantillas en varios idiomas para el detalle completo.

¿Dónde se crean las plantillas?

Las plantillas no se crean por API en ningún SDK — se agregan y editan desde Consola → Correos → Plantillas. El SDK solo referencia el id que le pongas ahí.

Mientras tanto