Logo

EmailAPI

Version: v1

Description: Permite validar varios aspectos de la configuracion de servidores de correo (MX, DMARC, DKIM, validacion de PTR y chequeo de relay abierto).

Email Checker API

Una API REST basada en PHP para verificar configuraciones relacionadas con servidores de correo electrónico. La API incluye endpoints para revisar registros MX, DMARC, DKIM, validación de variables PTR (Match), y comprobación de Open Relay.

Todas las consultas de DNS se realizan directamente utilizando servidores DNS que no guardan cache para aumentar la confiabilidad de las respuestas.

Uso de la API

Todos los endpoints responden a peticiones GET y devuelven datos en formato JSON. Se utiliza reescritura de URLs para que no sea necesario incluir el archivo index.php.

1. Consultar registros MX

/mx?domain=tudominio.com

Ejemplo de Petición:

bash
curl "http://api.latinapi.com/api/emailapi/mx?domain=google.com" -H "X-Api-Key: TU_LLAVE_API_PRIVADA"

Respuesta Exitosa:

json
{
"domain": "google.com",
"mx_records": [
{
"preference": 10,
"exchange": "smtp.google.com"
}
]
}

2. Consultar registros DMARC

/dmarc?domain=tudominio.com

Ejemplo de Petición:

bash
curl "http://api.latinapi.com/api/emailapi/dmarc?domain=google.com" -H "X-Api-Key: TU_LLAVE_API_PRIVADA"

Respuesta Exitosa:

json
{
"domain": "google.com",
"status": "valid",
"record": "v=DMARC1; p=reject; rua=mailto:postmaster@google.com"
}

3. Consultar registros DKIM

/dkim?domain=tudominio.com&selector=selector

Ejemplo de Petición:

bash
curl "http://api.latinapi.com/api/emailapi/dkim?domain=google.com&selector=20230601" -H "X-Api-Key: TU_LLAVE_API_PRIVADA"

Respuesta Exitosa:

json
{
"domain": "google.com",
"selector": "20230601",
"status": "valid",
"record": "v=DKIM1; k=rsa; p=MIIBI..."
}

4. Verificar el PTR del Hostname

/ptrmatch?hostname=smtp.tudominio.com

Este endpoint obtiene la IP para el hostname provisto y luego realiza una búsqueda inversa (PTR) para comprobar si coinciden.

Ejemplo de Petición:

bash
curl "http://api.latinapi.com/api/emailapi/ptrmatch?hostname=smtp.google.com" -H "X-Api-Key: TU_LLAVE_API_PRIVADA"

Respuesta Exitosa:

json
{
"hostname": "smtp.google.com",
"ip": "1.2.3.4",
"ptr": "smtp.google.com",
"match": true
}

5. Comprobar Open Relay

/openrelay?server=smtp.tudominio.com

Comprueba si el servidor permite enviar correos hacia otros dominios externos sin autenticación (Open Relay). También incluye el tiempo de respuesta.

Ejemplo de Petición:

bash
curl "http://api.latinapi.com/api/emailapi/openrelay?server=smtp.google.com" -H "X-Api-Key: TU_LLAVE_API_PRIVADA"

Respuesta Exitosa:

json
{
"server": "smtp.google.com",
"is_open_relay": false,
"response_time_ms": 125.43
}

Ejemplos de Implementación

A continuación se muestran ejemplos de cómo consumir la API en diferentes lenguajes de programación. En estos ejemplos consultamos el endpoint /mx para el dominio google.com.

Node.js (Fetch API)

javascript
fetch('http://api.latinapi.com/api/emailapi/mx?domain=google.com',{
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'X-Api-Key: TU_LLAVE_API_PRIVADA'
    })
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Python (Requests)

python
import requests

url = "http://api.latinapi.com/api/emailapi/mx"
params = {"domain": "google.com"}
headers = {
'Accept': 'application/json',
'X-Api-Key: TU_LLAVE_API_PRIVADA'
}

try:
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
data = response.json()
print(data)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")

PHP (cURL)

php
<?php
$url = "http://api.latinapi.com/api/emailapi/mx?domain=google.com";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [

"Content-Type: application/json",

"X-Api-Key: TULLAVEAPI"
]);

$response = curl_exec($ch);
if(curl_errno($ch)){
echo 'Error: ' . curl_error($ch);
} else {
$data = json_decode($response, true);
print_r($data);
}
curl_close($ch);
?>