EmailVerify LogoEmailVerify

Droid

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

Droid est un assistant terminal alimenté par l'IA pour les développeurs. Découvrez comment intégrer EmailVerify pour la vérification d'email dans vos flux de travail Droid.

Qu'est-ce que Droid ?

Droid est un assistant terminal IA moderne qui fournit :

  • Des suggestions de commandes intelligentes
  • La génération et l'explication de code
  • L'automatisation du shell
  • Le support multi-modèles (GPT-4, Claude, modèles locaux)

Configuration

Installer la CLI EmailVerify

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

Configuration de l'environnement

export EMAILVERIFY_API_KEY=your-api-key

Utilisation avec Droid

Vérification rapide

Vous : vérifie john@example.com avec emailverify

Droid :

Exécution : bv verify john@example.com --json

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

✅ L'email est valide (88% de confiance)

Opérations par lots

Vous : vérifie tous les emails dans contacts.csv et crée un rapport

Droid :

Je vais traiter le CSV et vérifier chaque email.

Lecture de contacts.csv... 250 entrées trouvées.

Progression : ████████████████████ 100%

Rapport récapitulatif :
┌──────────────┬───────┬────────┐
│ Statut       │ Nombre│ %      │
├──────────────┼───────┼────────┤
│ Valide       │ 198   │ 79.2%  │
│ Invalide     │ 32    │ 12.8%  │
│ Inconnu      │ 12    │ 4.8%   │
│ Jetable      │ 8     │ 3.2%   │
└──────────────┴───────┴────────┘

Fichiers générés :
- contacts_valid.csv (198 emails)
- contacts_invalid.csv (32 emails)
- contacts_review.csv (20 emails)

Voulez-vous que j'explique certains des emails invalides ?

Génération de code

Vous : crée un endpoint d'API Node.js pour la vérification d'email

Droid :

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

const router = Router();

// Limitation de débit : 100 requêtes par minute
const limiter = rateLimit({
  windowMs: 60 * 1000,
  max: 100,
  message: { error: 'Too many requests' }
});

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

  if (!email) {
    return res.status(400).json({ error: 'Email is required' });
  }

  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: 'Verification service unavailable' });
  }
});

export default router;

Enregistré dans routes/verify.ts

Automatisation shell

Vous : crée une tâche cron qui vérifie les nouvelles inscriptions quotidiennement

Droid :

# Créer le script de vérification
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): Début de la vérification quotidienne des emails" >> $LOG_FILE

# Obtenir les emails non vérifiés de la base de données
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  # Limitation de débit
done

echo "$(date): Vérifié $count emails, $invalid invalides" >> $LOG_FILE
EOF

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

# Ajouter au crontab (s'exécute à 2h du matin quotidiennement)
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/verify-daily-signups.sh") | crontab -

echo "✅ Tâche cron créée. S'exécutera quotidiennement à 2h du matin."

Tests d'intégration

Vous : écris des tests d'intégration pour la vérification d'email

Droid :

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

describe('Email Verification Integration', () => {
  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 not set');
    }
  });

  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('returns valid for known good email', async () => {
    const result = await verifyEmail('test@gmail.com');
    expect(result.status).toBe('valid');
    expect(result.score).toBeGreaterThan(0.5);
  });

  it('detects disposable emails', async () => {
    const result = await verifyEmail('test@mailinator.com');
    expect(result.result.disposable).toBe(true);
  });

  it('detects role-based emails', async () => {
    const result = await verifyEmail('info@example.com');
    expect(result.result.role).toBe(true);
  });

  it('handles invalid domains', async () => {
    const result = await verifyEmail('user@thisisnotarealdomain12345.xyz');
    expect(result.status).toBe('invalid');
  });

  it('returns proper structure', 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 Droid

Ajoutez-les à votre configuration Droid :

# ~/.droid/aliases.yml
aliases:
  vmail:
    description: "Vérifier une adresse email"
    command: "bv verify $1 --color"

  vmail-json:
    description: "Vérifier un email et sortir du JSON"
    command: "bv verify $1 --json | jq ."

  vmail-batch:
    description: "Vérifier des emails depuis un fichier"
    command: "bv verify --file $1 --output results.csv"

  vmail-check:
    description: "Vérification rapide si l'email est valide (retourne 0 ou 1)"
    command: "bv verify $1 --quiet"

Utilisation :

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

Prochaines étapes

On this page