Inicio rápido
Enviar tu primer email con la API
Verifica un dominio, crea una clave de API y envía tu primer email con cURL o con un SDK oficial para Node.js, Python, PHP, Ruby, Go, Java, .NET o Rust.
Este inicio rápido te lleva de una cuenta nueva a un email entregado en unos cinco minutos, más el tiempo que tarde tu proveedor de DNS en publicar los registros. Verificarás un dominio, crearás una clave de API, enviarás un email y lo encontrarás en el panel.
Antes de empezar
- Una cuenta de Emailit. Regístrate en dash.emailit.com.
- Un dominio al que puedas añadir registros DNS, como
acme.com. También puedes usar un subdominio, comomail.acme.com.
Añadir y verificar tu dominio
Emailit solo envía desde dominios que hayas verificado, para que los servidores de correo de los destinatarios puedan comprobar que el email procede realmente de ti.
-
Añade el dominio. Ve a Email APIDomains, selecciona Add domain, introduce
acme.comy selecciona Create. -
Publica los registros DNS. La página del dominio lista los registros que debes añadir en tu proveedor de DNS. Copia los valores exactos de esa página. Los tres registros obligatorios tienen este aspecto:
Tipo Nombre Valor TXT emailit._domainkey.acme.comv=DKIM1; t=s; h=sha256; p=…(tu clave)TXT emailit.acme.comv=spf1 include:_spf.emailit.com ~allMX emailit.acme.com, prioridad 10feedback-smtp.ffdc-1.emailit.comSi tus DNS están en Cloudflare, puedes publicar en su lugar los registros con un clic. Consulta Cloudflare.
-
Comprueba los DNS. Selecciona Check DNS. Cuando SPF, DKIM y Return Path muestran OK, el dominio está Verified. La mayoría de los proveedores publican los registros en minutos, pero puede tardar hasta 48 horas.
En Pay as you go, un dominio registrado hace menos de 30 días muestra Pending verification hasta que el equipo de Emailit lo revisa. Para los detalles y los registros opcionales de DMARC, seguimiento y email entrante, consulta Añadir un dominio.
Crear una clave de API
-
Abre API Keys. Ve a Email APIAPI Keys y selecciona Add API key.
-
Ponle nombre a la clave y elige un permiso. Introduce un nombre como
Quickstart. Sending Only solo puede enviar emails. Full Access también puede llamar al resto de la API. Cualquiera de las dos sirve para este inicio rápido. -
Copia la clave. Selecciona Create y copia la clave. Empieza por
secret_y solo se muestra una vez. -
Guárdala en una variable de entorno para mantenerla fuera de tu código:
export EMAILIT_API_KEY="secret_••••"
Enviar un email
Instala el SDK de tu lenguaje o usa cURL:
# cURL is preinstalled on macOS, Linux and Windows 10 or later
curl --versionnpm install @emailit/nodepip install emailitcomposer require emailit/emailit-phpcomposer require emailit/emailit-laravel
# Then add EMAILIT_API_KEY=secret_•••• to your .env filegem install emailitgo get github.com/emailit/emailit-go/v2<dependency>
<groupId>com.emailit</groupId>
<artifactId>emailit-java</artifactId>
<version><!-- latest version from Maven Central --></version>
</dependency>dotnet add package Emailitcargo add emailit
cargo add tokio --features fullDespués, envía un email. Usa una dirección del remitente del dominio que verificaste y envíalo a la dirección de email con la que te registraste:
curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Hello from Emailit",
"html": "<p>This is my first email sent with Emailit.</p>"
}'import { Emailit } from '@emailit/node';
const emailit = new Emailit(process.env.EMAILIT_API_KEY);
const email = await emailit.emails.send({
from: 'Acme <hello@acme.com>',
to: 'ada@example.com',
subject: 'Hello from Emailit',
html: '<p>This is my first email sent with Emailit.</p>',
});
console.log(email.id, email.status);import os
from emailit import EmailitClient
client = EmailitClient(os.environ["EMAILIT_API_KEY"])
email = client.emails.send({
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Hello from Emailit",
"html": "<p>This is my first email sent with Emailit.</p>",
})
print(email.id, email.status)<?php
require 'vendor/autoload.php';
$emailit = Emailit::client(getenv('EMAILIT_API_KEY'));
$email = $emailit->emails()->send([
'from' => 'Acme <hello@acme.com>',
'to' => 'ada@example.com',
'subject' => 'Hello from Emailit',
'html' => '<p>This is my first email sent with Emailit.</p>',
]);
echo $email->id . ' ' . $email->status;use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'Acme <hello@acme.com>',
'to' => 'ada@example.com',
'subject' => 'Hello from Emailit',
'html' => '<p>This is my first email sent with Emailit.</p>',
]);
logger()->info('Sent email', ['id' => $email->id]);require "emailit"
client = Emailit::EmailitClient.new(ENV["EMAILIT_API_KEY"])
email = client.emails.send(
from: "Acme <hello@acme.com>",
to: "ada@example.com",
subject: "Hello from Emailit",
html: "<p>This is my first email sent with Emailit.</p>"
)
puts email.id, email.statuspackage main
import (
"fmt"
"os"
"github.com/emailit/emailit-go/v2"
)
func main() {
client := emailit.NewClient(os.Getenv("EMAILIT_API_KEY"))
email, err := client.Emails.Send(&emailit.SendEmailRequest{
From: "Acme <hello@acme.com>",
To: []string{"ada@example.com"},
Subject: "Hello from Emailit",
Html: "<p>This is my first email sent with Emailit.</p>",
})
if err != nil {
panic(err)
}
fmt.Println(email.Id)
}import com.emailit.*;
import com.emailit.params.*;
import java.util.List;
public class SendEmail {
public static void main(String[] args) throws Exception {
EmailitClient emailit = new EmailitClient(System.getenv("EMAILIT_API_KEY"));
EmailitObject email = emailit.emails().send(
EmailSendParams.builder()
.setFrom("Acme <hello@acme.com>")
.setTo(List.of("ada@example.com"))
.setSubject("Hello from Emailit")
.setHtml("<p>This is my first email sent with Emailit.</p>")
.build()
);
System.out.println(email.getString("id"));
}
}using Emailit;
using Emailit.Options;
using Emailit.Resources;
var emailit = new EmailitClient(Environment.GetEnvironmentVariable("EMAILIT_API_KEY"));
Email email = emailit.Emails.Send(new EmailSendOptions
{
From = "Acme <hello@acme.com>",
To = new[] { "ada@example.com" },
Subject = "Hello from Emailit",
Html = "<p>This is my first email sent with Emailit.</p>",
});
Console.WriteLine($"{email.Id} {email.Status}");use emailit::types::CreateEmailBaseOptions;
use emailit::{Emailit, Result};
#[tokio::main]
async fn main() -> Result<()> {
let api_key = std::env::var("EMAILIT_API_KEY").expect("EMAILIT_API_KEY is not set");
let emailit = Emailit::new(&api_key);
let email = CreateEmailBaseOptions::new(
"Acme <hello@acme.com>",
["ada@example.com"],
"Hello from Emailit",
)
.with_html("<p>This is my first email sent with Emailit.</p>");
let result = emailit.emails.send(email).await?;
println!("{:?}", result.id);
Ok(())
}Leer la respuesta
Una petición correcta devuelve 200 con el email nuevo:
{
"object": "email",
"id": "em_2pX7cN4kQ9vLm3RtB8yWd1Zs",
"token": "2pX7cN4m8FqT1vKz6RbL3HwYd",
"message_id": "<2pX7cN4m8FqT1vKz6RbL3HwYd@acme.com>",
"from": "Acme <hello@acme.com>",
"to": ["ada@example.com"],
"subject": "Hello from Emailit",
"status": "accepted",
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.418Z",
"tracking": { "loads": false, "clicks": false }
}| Campo | Significado |
|---|---|
id |
El ID del email. Úsalo para consultar el email, cancelarlo o reintentarlo, y para relacionarlo con los eventos de webhook. |
status |
accepted significa que Emailit ha puesto el email en cola para su entrega. Es scheduled si defines scheduled_at. |
message_id |
La cabecera Message-ID del email. |
ids |
Solo aparece con varios destinatarios. Asocia cada dirección de destinatario con su propio ID de email. |
tracking |
Si se hace seguimiento de las aperturas (loads) y de los clics de este email. El seguimiento requiere un subdominio de seguimiento verificado. |
accepted no significa que ya se haya entregado. La entrega se produce en segundo plano y el estado cambia a medida que avanza.
Comprobarlo en el panel
Ve a Email APIEmails. Tu email aparece arriba del todo en la pestaña Outgoing. En unos segundos, su estado suele cambiar de accepted a delivered. Ábrelo para ver las cabeceras, el contenido, cada intento de entrega con la respuesta del servidor receptor y los resultados de las comprobaciones de spam.
La petición aparece en Email APILogs, con el código de estado y los cuerpos de la petición y de la respuesta.
Solución de problemas
| Respuesta | Causa | Solución |
|---|---|---|
401 API key required o Invalid API key |
Falta la cabecera Authorization o la clave es incorrecta |
Envía Authorization: Bearer secret_… con una clave vigente |
403 unverified_workspace_recipient |
El espacio de trabajo está en modo sandbox | Envía a la dirección de email de la cuenta de un miembro del espacio de trabajo o solicita acceso de producción |
422 From/Sender domain is not valid or not verified |
El dominio del remitente no está verificado en este espacio de trabajo | Verifica el dominio o usa una dirección de un dominio verificado |
403 Domain not authorized |
La clave Sending Only está limitada a otro dominio | Usa una clave para este dominio o una clave sin limitación de dominio |
402 Insufficient credits |
El espacio de trabajo no tiene créditos suficientes | Añade créditos |
429 Rate limit exceeded |
Demasiados emails en este segundo o en el día de hoy | Espera el tiempo indicado en retry-after. Consulta Límites de velocidad. |