Ahrara
Zero Retention. Simple. Gratis. Código abierto.
Correo desechable pensado para agentes de IA, QA y automatizaciones
Recibe cualquier correo directamente en tu navegador o en una bandeja de tu equipo. Úsala desde la terminal, tu agente de IA o tus pruebas.
Qué es Ahrara, cómo funciona y por qué usarlo
- ¿Qué es Ahrara?
- Direcciones de correo desechables con una bandeja en tu equipo. Lee los mensajes en la terminal o en el navegador, o automatiza con MCP, la API local y los SDK.
- ¿Cómo funciona?
- Ahrara genera las direcciones localmente. Mientras se ejecuta, el servidor transmite los correos entrantes por una conexión cifrada a la bandeja de tu equipo.
- ¿Por qué usar Ahrara?
- Prueba registros, códigos de verificación y plantillas de correo con direcciones dedicadas. Mantén los correos de prueba fuera de tu bandeja personal y deja que tu agente se encargue de las comprobaciones repetitivas.
Cómo usarlo
Lee tu correo en el navegador o en la terminal, pásaselo a tu agente de IA o valídalo desde tus pruebas.
En el navegador
Sin instalar nada: abre la app web, crea tu dirección y lee tus correos ahí mismo. Tu bandeja se queda en tu navegador.
Abrir la app webMantén la pestaña abierta para recibir correos. Qué admite la versión del navegador.
Bandeja de entrada 2
CLI
Instala Ahrara y ejecuta ahrara en tu terminal. Tu dirección de correo se crea automáticamente.
Mantén Ahrara en ejecución para recibir correos.
ahrara- Status
- [+] Connected
- [email protected] (+3 more)
- Web
- http://127.0.0.1:8787
- MCP
- http://127.0.0.1:8787/mcp
| Seleccionado | Received (local) | From | Subject | Size |
|---|---|---|---|---|
| Correo seleccionado | GitHub <[email protected]> | Your verification code: 482916 | 1.0 KiB | |
| Linear <[email protected]> | You're invited to the workspace | 1.4 KiB |
Agentes de IA
El propio agente gestiona Ahrara.
Plugins, reglas y MCP para 25 agentes de programación.
/plugin marketplace add Hitmasu/Ahrara
/plugin install ahrara@ahraraEjecútalo dentro de Claude Code y después recarga los plugins. El plugin necesita Node.js 20+.
¿Usas otro agente? Consulta la instalación de agentes para ver todos los hosts compatibles.
- Dirección desechable creadaEscuchando correos mediante Ahrara MCP.
- Cuenta creada en tu aplicaciónFormulario de registro enviado con la dirección de Ahrara.
- Correo verificadoUsé el código
482916del correo de verificación para confirmar la cuenta. - Plantillas de correo validadasRevisé los asuntos, el texto plano y el HTML de los correos de verificación y de bienvenida.
Prueba E2E superada. Cuenta verificada y plantillas de correo conformes a lo esperado.
SDKs
Da a cada prueba su propia bandeja. Usa su dirección en un flujo de registro o de restablecimiento de contraseña, espera el correo y extrae un código o un enlace. Cada bandeja se conecta directamente al servidor, sin una CLI en ejecución al lado.
Los paquetes incluyen la biblioteca nativa. Validados en Linux x64.
npm install @ahrara/sdkNode.js 20+.
Consulta la guía de los SDK para filtros, enlaces, adjuntos y reutilización de bandejas.
import { Ahrara } from '@ahrara/sdk';
const inbox = await Ahrara.createInbox();
try {
// La aplicación solicita un correo de verificación para inbox.address aquí.
const match = await inbox.waitForRegexMatch('[0-9]{6}', {
timeoutMs: 30_000,
filter: { subject: 'Verification' },
});
// El código extraído queda disponible para la aplicación.
const code = match.value;
} finally {
await inbox.close();
}
from ahrara import create_inbox
with create_inbox() as inbox:
# La aplicación solicita un correo de verificación para inbox.address aquí.
match = inbox.wait_for_regex_match(
r"[0-9]{6}", timeout=30, filter={"subject": "Verification"},
)
code = match["value"]
# El código extraído queda disponible para la aplicación.
using System;
using System.IO;
using AhraraSdk;
await using var inbox = await Ahrara.CreateInboxAsync();
// La aplicación solicita un correo de verificación para inbox.Address aquí.
var match = await inbox.WaitForRegexMatchAsync(
@"[0-9]{6}", timeout: TimeSpan.FromSeconds(30),
filter: new EmailFilter { Subject = "Verification" });
var code = match.Value;
// El código extraído queda disponible para la aplicación.
import dev.ahrara.Ahrara;
import dev.ahrara.EmailFilter;
import java.time.Duration;
class Example {
public static void main(String[] args) throws Exception {
try (var inbox = Ahrara.createInbox()) {
// La aplicación solicita un correo de verificación para inbox.address() aquí.
var match = inbox.waitForRegexMatch(
"[0-9]{6}", Duration.ofSeconds(30),
EmailFilter.builder().subject("Verification").build());
var code = match.value();
// El código extraído queda disponible para la aplicación.
}
}
}
package main
import (
"context"
"time"
ahrara "github.com/Hitmasu/Ahrara/src/sdks/go"
)
func receive(ctx context.Context) error {
inbox, err := ahrara.CreateInbox(ctx, ahrara.Options{})
if err != nil { return err }
defer inbox.Close()
// La aplicación solicita un correo de verificación para inbox.Address aquí.
wait, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
match, err := inbox.WaitForRegexMatch(wait, `[0-9]{6}`,
ahrara.RegexOptions{Filter: ahrara.Filter{Subject: "Verification"}})
if err != nil { return err }
_ = match.Value // El código extraído queda disponible para la aplicación.
return nil
}
func main() {
if err := receive(context.Background()); err != nil { panic(err) }
}
use ahrara_core::{Inbox, InboxOptions, WaitOptions};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let inbox = Inbox::create(InboxOptions::default()).await?;
let result = async {
// La aplicación solicita un correo de verificación para inbox.address() aquí.
let options = WaitOptions {
timeout_ms: Some(30_000),
subject: Some("Verification".into()),
..Default::default()
};
let matched = inbox.wait_for_regex_match("[0-9]{6}", options).await?
.ok_or_else(|| anyhow::anyhow!("Email timed out"))?;
let _code = matched.value;
// El código extraído queda disponible para la aplicación.
Ok::<(), anyhow::Error>(())
}.await;
inbox.close().await;
result
}
import ahrara from 'k6/x/ahrara';
export default function () {
const inbox = ahrara.createInbox({});
try {
// La aplicación solicita un correo de verificación para inbox.address aquí.
const match = inbox.waitForRegexMatch('[0-9]{6}', {
durationMs: 30_000,
filter: { subject: 'Verification' },
});
// El código extraído queda disponible para la aplicación.
const code = match.value;
} finally {
inbox.close();
}
}
Frameworks de pruebas
Crea la bandeja en el setup de tu prueba, usa su dirección en el flujo que pruebas y ciérrala en el teardown.
Usa el SDK desde el framework que ya utilizas.
npm install @ahrara/sdkGestiona la bandeja en un fixture de prueba de Node.
Las mismas API funcionan con xUnit, NUnit, MSTest, pytest y JUnit, y con Selenium mediante el SDK de Java.
import { test, expect } from '@playwright/test';
import { Ahrara } from '@ahrara/sdk';
test.use({ baseURL: 'https://app.example.com' });
test('receives the email', async ({ page }) => {
const inbox = await Ahrara.createInbox();
try {
await page.goto('/signup');
await page.getByLabel('Email', { exact: true }).fill(inbox.address);
await page.getByRole('button', { name: 'Sign up', exact: true }).click();
const match = await inbox.waitForRegexMatch('[0-9]{6}', {
timeoutMs: 30_000,
filter: { subject: 'Verification' },
});
await page.getByLabel('Verification code').fill(match.value);
await page.getByRole('button', { name: 'Verify', exact: true }).click();
await expect(page.getByText('Verified', { exact: true })).toBeVisible();
} finally {
await inbox.close();
}
});
describe('Email flow', () => {
let address;
afterEach(() => {
if (address) {
const current = address;
address = undefined;
cy.task('closeInbox', current);
}
});
it('receives the email', () => {
cy.task('createInbox', {}).then(value => {
address = value;
cy.visit('/signup');
cy.get('[name="email"]').type(address);
cy.contains('button', 'Sign up').click();
cy.task('waitForRegexMatch', {
address, pattern: '[0-9]{6}', subject: 'Verification',
}, { timeout: 35_000 }).then(result => {
cy.get('[name="code"]').type(result.value);
cy.contains('button', 'Verify').click();
cy.contains('Verified').should('be.visible');
});
});
});
});
*** Settings ***
Library ahrara.robot.AhraraLibrary WITH NAME Ahrara
Library SeleniumLibrary
Test Teardown Run Keywords Ahrara.Close Inbox AND Close All Browsers
*** Test Cases ***
Receive Email
${address}= Ahrara.Create Inbox
Open Browser https://app.example.com/signup chrome
Input Text name:email ${address}
Click Button Sign up
${filter}= Create Dictionary subject=Verification
${match}= Ahrara.Wait For Regex Match [0-9]{6} timeout=30 filter=${filter}
Input Text name:code ${match}[value]
Click Button Verify
Wait Until Page Contains Verified
Cero retención de datos
El servidor de Ahrara no guarda correos ni registros de direcciones. Su diseño sin estado mantiene la entrega simple, sin una bandeja en el servidor que mantener.
Tu correo es tuyo
Tus direcciones se generan localmente y están vinculadas a tu identidad criptográfica. Tu clave privada permanece en tu equipo y demuestra que son tuyas al conectarte.
- Correo entranteEntregado en tiempo real
- Servidor AhraraSin retención de correos
- Tu equipoTu bandeja local
Tus correos y direcciones solo se guardan en tu equipo.
100% gratis
Todas las funciones de Ahrara son gratuitas. Sin necesidad de crear una cuenta. Código abierto.
Las donaciones son bienvenidas y totalmente opcionales.
Preguntas frecuentes
¿Ahrara guarda mis correos o direcciones en sus servidores?
No. Los mensajes pasan por el servidor sin guardarse, y las direcciones de correo no se registran allí. Tu bandeja y tus direcciones se guardan localmente en tu equipo.
¿Puedo enviar correos con Ahrara?
No. Ahrara solo recibe correos. No permite enviar mensajes ni responderlos.
¿Ahrara es un relay de correo abierto?
No. Los remitentes pueden entregar correo sin iniciar sesión, pero Ahrara nunca lo reenvía a servidores de correo externos. Los mensajes solo llegan al cliente Ahrara autenticado de la dirección de destino.
¿Puedo usar mi propio dominio?
Sí. Configura el reenvío desde tu dominio a una dirección de Ahrara y después añade el dominio en Ahrara. Las direcciones nuevas usarán tu dominio en lugar de ahrara.dev. Consulta la guía de dominios propios para ver cómo configurarlo.