Droid
Email checker with Droid CLI. Verify emails in Droid AI assistant.
Droid - это ИИ-терминальный ассистент для разработчиков. Узнайте, как интегрировать EmailVerify для верификации email в ваших рабочих процессах с Droid.
Что такое Droid?
Droid - это современный ИИ-терминальный ассистент, который предоставляет:
- Интеллектуальные подсказки команд
- Генерацию и объяснение кода
- Автоматизацию shell
- Поддержку множества моделей (GPT-4, Claude, локальные модели)
Настройка
Установка EmailVerify CLI
npm install -g @emailverify/cli
bv config set api-key YOUR_API_KEYНастройка окружения
export EMAILVERIFY_API_KEY=your-api-keyИспользование с Droid
Быстрая верификация
Вы: verify john@example.com with emailverify
Droid:
Running: bv verify john@example.com --json
{
"email": "john@example.com",
"status": "valid",
"score": 0.88,
"result": {
"deliverable": true,
"disposable": false,
"role": false
}
}
✅ Email действителен (88% уверенность)Пакетные операции
Вы: verify all emails in contacts.csv and create a report
Droid:
Обработаю CSV и проверю каждый email.
Чтение contacts.csv... найдено 250 записей.
Прогресс: ████████████████████ 100%
Сводный отчет:
┌──────────────┬───────┬────────┐
│ Статус │ Кол-во│ % │
├──────────────┼───────┼────────┤
│ Действительн.│ 198 │ 79.2% │
│ Недействит. │ 32 │ 12.8% │
│ Неизвестен │ 12 │ 4.8% │
│ Временный │ 8 │ 3.2% │
└──────────────┴───────┴────────┘
Созданные файлы:
- contacts_valid.csv (198 email)
- contacts_invalid.csv (32 email)
- contacts_review.csv (20 email)
Хотите, чтобы я объяснил какие-либо недействительные email?Генерация кода
Вы: create a Node.js API endpoint for email verification
Droid:
// routes/verify.ts
import { Router } from 'express';
import rateLimit from 'express-rate-limit';
const router = Router();
// Rate limit: 100 requests per 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;Сохранено в routes/verify.ts
Автоматизация shell
Вы: create a cron job that verifies new signups daily
Droid:
# Create the verification script
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): Starting daily email verification" >> $LOG_FILE
# Get unverified emails from database
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 # Rate limiting
done
echo "$(date): Verified $count emails, $invalid invalid" >> $LOG_FILE
EOF
chmod +x /usr/local/bin/verify-daily-signups.sh
# Add to crontab (runs at 2 AM daily)
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/verify-daily-signups.sh") | crontab -
echo "✅ Cron job created. Will run daily at 2 AM."Интеграционные тесты
Вы: write integration tests for email verification
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');
});
});Алиасы Droid
Добавьте их в вашу конфигурацию Droid:
# ~/.droid/aliases.yml
aliases:
vmail:
description: "Verify an email address"
command: "bv verify $1 --color"
vmail-json:
description: "Verify an email and output JSON"
command: "bv verify $1 --json | jq ."
vmail-batch:
description: "Verify emails from a file"
command: "bv verify --file $1 --output results.csv"
vmail-check:
description: "Quick check if email is valid (returns 0 or 1)"
command: "bv verify $1 --quiet"Использование:
droid vmail user@example.com
droid vmail-batch contacts.txt