EmailVerify LogoEmailVerify

Droid

Email checker with Droid CLI. Verify emails in Droid AI assistant.

Droid es un asistente de terminal con IA para desarrolladores. Aprende cómo integrar EmailVerify para la verificación de correo electrónico en tus flujos de trabajo con Droid.

¿Qué es Droid?

Droid es un moderno asistente de terminal con IA que proporciona:

  • Sugerencias de comandos inteligentes
  • Generación y explicación de código
  • Automatización de shell
  • Soporte multi-modelo (GPT-4, Claude, modelos locales)

Configuración

Instalar EmailVerify CLI

npm install -g @emailverify/cli
bv config set api-key YOUR_API_KEY

Configuración de Entorno

export EMAILVERIFY_API_KEY=your-api-key

Uso con Droid

Verificación Rápida

Tú: verifica john@example.com con emailverify

Droid:

Ejecutando: bv verify john@example.com --json

{
  "email": "john@example.com",
  "status": "valid",
  "score": 0.88,
  "result": {
    "deliverable": true,
    "disposable": false,
    "role": false
  }
}

✅ El correo electrónico es válido (88% de confianza)

Operaciones por Lotes

Tú: verifica todos los correos electrónicos en contacts.csv y crea un informe

Droid:

Procesaré el CSV y verificaré cada correo electrónico.

Leyendo contacts.csv... 250 entradas encontradas.

Progreso: ████████████████████ 100%

Informe Resumen:
┌──────────────┬───────┬────────┐
│ Estado       │ Cant. │ %      │
├──────────────┼───────┼────────┤
│ Válido       │ 198   │ 79.2%  │
│ Inválido     │ 32    │ 12.8%  │
│ Desconocido  │ 12    │ 4.8%   │
│ Desechable   │ 8     │ 3.2%   │
└──────────────┴───────┴────────┘

Archivos generados:
- contacts_valid.csv (198 correos electrónicos)
- contacts_invalid.csv (32 correos electrónicos)
- contacts_review.csv (20 correos electrónicos)

¿Te gustaría que te explicara alguno de los correos electrónicos inválidos?

Generación de Código

Tú: crea un endpoint de API Node.js para verificación de correo electrónico

Droid:

// routes/verify.ts
import { Router } from 'express';
import rateLimit from 'express-rate-limit';

const router = Router();

// Límite de tasa: 100 solicitudes por minuto
const limiter = rateLimit({
  windowMs: 60 * 1000,
  max: 100,
  message: { error: 'Demasiadas solicitudes' }
});

router.post('/verify', limiter, async (req, res) => {
  const { email } = req.body;

  if (!email) {
    return res.status(400).json({ error: 'El correo electrónico es requerido' });
  }

  try {
    const response = await fetch('https://api.emailverify.ai/v1/verify', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.EMAILVERIFY_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email }),
    });

    const result = await response.json();

    return res.json({
      email,
      isValid: result.status === 'valid',
      score: result.score,
      flags: {
        disposable: result.result.disposable,
        role: result.result.role,
      }
    });
  } catch (error) {
    return res.status(500).json({ error: 'Servicio de verificación no disponible' });
  }
});

export default router;

Guardado en routes/verify.ts

Automatización de Shell

Tú: crea un cron job que verifique nuevos registros diariamente

Droid:

# Crear el script de verificación
cat > /usr/local/bin/verify-daily-signups.sh << 'EOF'
#!/bin/bash
set -e

LOG_FILE="/var/log/email-verification.log"
DB_HOST="${DB_HOST:-localhost}"
DB_NAME="${DB_NAME:-myapp}"

echo "$(date): Iniciando verificación diaria de correos electrónicos" >> $LOG_FILE

# Obtener correos electrónicos no verificados de la base de datos
emails=$(psql -h $DB_HOST -d $DB_NAME -t -c \
  "SELECT email FROM users WHERE email_verified IS NULL AND created_at > NOW() - INTERVAL '1 day'")

count=0
invalid=0

for email in $emails; do
  result=$(bv verify "$email" --json 2>/dev/null)
  status=$(echo "$result" | jq -r '.status')

  if [ "$status" = "valid" ]; then
    psql -h $DB_HOST -d $DB_NAME -c \
      "UPDATE users SET email_verified = true WHERE email = '$email'"
  else
    psql -h $DB_HOST -d $DB_NAME -c \
      "UPDATE users SET email_verified = false, email_status = '$status' WHERE email = '$email'"
    ((invalid++))
  fi
  ((count++))

  sleep 0.1  # Límite de tasa
done

echo "$(date): Verificados $count correos electrónicos, $invalid inválidos" >> $LOG_FILE
EOF

chmod +x /usr/local/bin/verify-daily-signups.sh

# Agregar al crontab (se ejecuta a las 2 AM diariamente)
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/verify-daily-signups.sh") | crontab -

echo "✅ Cron job creado. Se ejecutará diariamente a las 2 AM."

Pruebas de Integración

Tú: escribe pruebas de integración para verificación de correo electrónico

Droid:

// __tests__/email-verification.test.ts
import { describe, it, expect, beforeAll } from 'vitest';

describe('Integración de Verificación de Correo Electrónico', () => {
  const API_URL = 'https://api.emailverify.ai/v1/verify';
  let apiKey: string;

  beforeAll(() => {
    apiKey = process.env.EMAILVERIFY_API_KEY!;
    if (!apiKey) {
      throw new Error('EMAILVERIFY_API_KEY no configurado');
    }
  });

  async function verifyEmail(email: string) {
    const response = await fetch(API_URL, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email }),
    });
    return response.json();
  }

  it('devuelve válido para correo electrónico conocido bueno', async () => {
    const result = await verifyEmail('test@gmail.com');
    expect(result.status).toBe('valid');
    expect(result.score).toBeGreaterThan(0.5);
  });

  it('detecta correos electrónicos desechables', async () => {
    const result = await verifyEmail('test@mailinator.com');
    expect(result.result.disposable).toBe(true);
  });

  it('detecta correos electrónicos basados en roles', async () => {
    const result = await verifyEmail('info@example.com');
    expect(result.result.role).toBe(true);
  });

  it('maneja dominios inválidos', async () => {
    const result = await verifyEmail('user@thisisnotarealdomain12345.xyz');
    expect(result.status).toBe('invalid');
  });

  it('devuelve estructura adecuada', async () => {
    const result = await verifyEmail('user@example.com');

    expect(result).toHaveProperty('email');
    expect(result).toHaveProperty('status');
    expect(result).toHaveProperty('score');
    expect(result).toHaveProperty('result');
    expect(result.result).toHaveProperty('deliverable');
    expect(result.result).toHaveProperty('disposable');
    expect(result.result).toHaveProperty('role');
  });
});

Alias de Droid

Agrega estos a tu configuración de Droid:

# ~/.droid/aliases.yml
aliases:
  vmail:
    description: "Verificar una dirección de correo electrónico"
    command: "bv verify $1 --color"

  vmail-json:
    description: "Verificar un correo electrónico y mostrar JSON"
    command: "bv verify $1 --json | jq ."

  vmail-batch:
    description: "Verificar correos electrónicos desde un archivo"
    command: "bv verify --file $1 --output results.csv"

  vmail-check:
    description: "Verificación rápida si el correo electrónico es válido (devuelve 0 o 1)"
    command: "bv verify $1 --quiet"

Uso:

droid vmail user@example.com
droid vmail-batch contacts.txt

Próximos Pasos

On this page