Enviando correos

Holamail es un listener SMTP ligero. Acepta los comandos básicos HELO/EHLO, MAIL FROM, RCPT TO, DATA y QUIT, y luego registra el mensaje. No entrega correo a destinatarios externos.

Detalles de conexión

Parámetro Host público de pruebas Instancia local
Host smtp.testmail.hola.cloud localhost
Puerto 25 2525
Cifrado Ninguno Ninguno
Autenticación Ninguna Ninguna

Holamail no soporta STARTTLS ni SMTP AUTH.

Flujo SMTP

1HELO client.example.com
2MAIL FROM:<noreply@example.com>
3RCPT TO:<user@example.com>
4DATA
5Subject: Hola desde Holamail
6
7Este mensaje será registrado por Holamail.
8.
9QUIT

Ejemplos

Con curl

curl --url smtp://smtp.testmail.hola.cloud:25 \
     --mail-from noreply@example.com \
     --mail-rcpt user@example.com \
     --upload-file email.txt
GET / HTTP/1.1
Host: smtp.testmail.hola.cloud:25
// Go 1.21+, standard library only. Save as main.go and run: go run main.go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "smtp://smtp.testmail.hola.cloud:25", nil)
	if err != nil {
		panic(err)
	}

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

	responseBody, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status)
	fmt.Println(string(responseBody))
}
<?php
// PHP 8+ with the curl extension. Save as example.php and run: php example.php

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => 'smtp://smtp.testmail.hola.cloud:25',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
]);

$response = curl_exec($ch);
if ($response === false) {
    throw new Exception(curl_error($ch));
}
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $response, "\n";
curl_close($ch);
# Python 3.8+. Install: pip install requests. Save as example.py and run: python example.py
import requests

response = requests.request(
    "GET",
    "smtp://smtp.testmail.hola.cloud:25"
)

print(response.status_code)
print(response.text)
// Node.js 18+. Save as example.mjs and run: node example.mjs
const response = await fetch("smtp://smtp.testmail.hola.cloud:25", {
  method: "GET"
});

console.log(response.status);
console.log(await response.text());
const response = await fetch("smtp://smtp.testmail.hola.cloud:25", {
  method: "GET"
});

console.log(response.status);
console.log(await response.text());
// Java 17+, standard library only. Save as Main.java and run: java Main.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        var request = HttpRequest.newBuilder()
            .uri(URI.create("smtp://smtp.testmail.hola.cloud:25"))
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();

        var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}

Donde email.txt contiene:

1Subject: Hola desde Holamail
2
3Este mensaje será registrado por Holamail.

Sesión TCP simple

1telnet localhost 2525

Luego ingresa:

1HELO client.example.com
2MAIL FROM:<noreply@example.com>
3RCPT TO:<user@example.com>
4DATA
5Subject: Prueba local de Holamail
6
7Hola desde un listener local de Holamail.
8.
9QUIT

Comportamiento esperado

Holamail acepta entrada SMTP sintácticamente válida y registra el mensaje. Es útil para confirmar que una aplicación puede hablar SMTP sin enviar correo real.

No soporta entrega externa, APIs HTTP, STARTTLS, AUTH, rate limiting, plantillas, analíticas ni tracking.

Comentarios

Deja un comentario