Cómo enviar correos con Go

Envía correos desde Go usando el paquete `net/http` de la biblioteca estándar.

No hay SDK oficial — llama a la API REST de Publiq con el cliente HTTP del lenguaje, desde el servidor, con la API key en el header Authorization.

package publiq

import (
	"bytes"
	"encoding/json"
	"net/http"
	"os"
)

func SendWelcome(to string) error {
	body, _ := json.Marshal(map[string]any{
		"from":        "you@yourdomain.com",
		"to":          to,
		"templateKey": "welcome-email",
		"variables":   map[string]string{"first_name": "Ana"},
	})
	req, _ := http.NewRequest("POST", "https://api.publiq.digital/v1/emails", bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("PUBLIQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	return nil
}

Buenas prácticas

  • Llama a Publiq siempre desde el servidor — la API key va en el header Authorization, nunca en el cliente.
  • En 429/5xx, reintenta con backoff exponencial (respeta Retry-After).
  • Prefiere templateKey sobre HTML inline para mantener el contenido versionado.
  • Maneja los errores por el campo error.code de la respuesta — ver Errores.
  • Envía desde un dominio verificado — ver Dominios.

Ver también

Cómo enviar correos con Go — Publiq Docs