OpenCode
Email checker with OpenCode CLI. Verify emails in OpenCode AI assistant.
OpenCode는 터미널용 오픈소스 AI 코딩 어시스턴트입니다. OpenCode 워크플로우에서 이메일 검증을 위해 EmailVerify를 사용하는 방법을 알아보세요.
OpenCode란?
OpenCode는 다음을 제공하는 커뮤니티 주도 오픈소스 AI 코딩 어시스턴트입니다:
- 자연어 코드 생성
- 셸 명령 실행
- 코드 리뷰 및 디버깅
- 로컬 및 클라우드 LLM과 통합
설정
EmailVerify CLI 설치
npm install -g @emailverify/cli
bv config set api-key YOUR_API_KEY환경 설정
셸 설정에 추가하세요:
export EMAILVERIFY_API_KEY=your-api-keyOpenCode와 함께 사용
기본 검증
사용자: bv 명령을 사용해서 user@company.com이 유효한 이메일인지 확인해줘
OpenCode:
EmailVerify CLI를 실행해서 그 이메일을 확인하겠습니다.
$ bv verify user@company.com
Email: user@company.com
Status: valid
Score: 0.92
Deliverable: yes
Disposable: no
Role: no
이메일이 유효하고 사용하기에 안전합니다.검증 코드 생성
사용자: EmailVerify로 이메일을 검증하는 TypeScript 함수 생성해줘
OpenCode:
async function verifyEmail(email: string): Promise<VerificationResult> {
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 }),
});
if (!response.ok) {
throw new Error(`Verification failed: ${response.statusText}`);
}
return response.json();
}
interface VerificationResult {
email: string;
status: 'valid' | 'invalid' | 'unknown';
score: number;
result: {
deliverable: boolean;
disposable: boolean;
role: boolean;
};
}데이터 처리
사용자: 모든 이메일을 검증해서 사용자 데이터베이스를 정리하는 스크립트 작성해줘
OpenCode:
#!/usr/bin/env python3
"""
Clean user database by verifying email addresses.
Moves invalid emails to a separate table for review.
"""
import os
import requests
import sqlite3
from typing import List, Tuple
API_KEY = os.environ['EMAILVERIFY_API_KEY']
API_URL = 'https://api.emailverify.ai/v1/verify'
def verify_email(email: str) -> dict:
"""Verify a single email address."""
response = requests.post(
API_URL,
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json',
},
json={'email': email}
)
return response.json()
def process_users(db_path: str) -> Tuple[int, int, int]:
"""Process all users and categorize by email validity."""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Create table for invalid emails if not exists
cursor.execute('''
CREATE TABLE IF NOT EXISTS invalid_emails (
user_id INTEGER,
email TEXT,
reason TEXT,
verified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Get all users
cursor.execute('SELECT id, email FROM users')
users = cursor.fetchall()
valid = 0
invalid = 0
unknown = 0
for user_id, email in users:
result = verify_email(email)
if result['status'] == 'valid':
valid += 1
elif result['status'] == 'invalid':
invalid += 1
cursor.execute(
'INSERT INTO invalid_emails (user_id, email, reason) VALUES (?, ?, ?)',
(user_id, email, 'invalid')
)
else:
unknown += 1
# Rate limiting
import time
time.sleep(0.1)
conn.commit()
conn.close()
return valid, invalid, unknown
if __name__ == '__main__':
valid, invalid, unknown = process_users('users.db')
print(f'Results: {valid} valid, {invalid} invalid, {unknown} unknown')CI/CD 통합
사용자: GitHub Actions 워크플로우에 이메일 검증 추가해줘
OpenCode:
# .github/workflows/verify-test-emails.yml
name: Verify Test Emails
on:
pull_request:
paths:
- 'test/**'
- 'fixtures/**'
jobs:
verify-emails:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install EmailVerify CLI
run: npm install -g @emailverify/cli
- name: Extract and verify emails
env:
EMAILVERIFY_API_KEY: ${{ secrets.EMAILVERIFY_API_KEY }}
run: |
# Find all email addresses in test files
emails=$(grep -rhoE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' test/ fixtures/ | sort -u)
echo "Found emails to verify:"
echo "$emails"
# Verify each email
failed=0
for email in $emails; do
# Skip example.com and test domains
if [[ "$email" =~ @(example\.(com|org|net)|test\.com)$ ]]; then
echo "⏭️ Skipping test domain: $email"
continue
fi
result=$(bv verify "$email" --json 2>/dev/null)
status=$(echo "$result" | jq -r '.status')
if [ "$status" = "valid" ]; then
echo "⚠️ Real email found in tests: $email"
failed=1
fi
done
if [ $failed -eq 1 ]; then
echo "::error::Real email addresses found in test files!"
exit 1
fi
echo "✅ No real emails in test files"자동화 레시피
일괄 처리 스크립트
#!/bin/bash
# verify-list.sh - 이메일 목록을 검증하고 결과를 CSV로 출력
input_file="${1:-emails.txt}"
output_file="${2:-results.csv}"
echo "email,status,score,disposable,role" > "$output_file"
while IFS= read -r email; do
[ -z "$email" ] && continue
result=$(bv verify "$email" --json 2>/dev/null)
status=$(echo "$result" | jq -r '.status')
score=$(echo "$result" | jq -r '.score')
disposable=$(echo "$result" | jq -r '.result.disposable')
role=$(echo "$result" | jq -r '.result.role')
echo "$email,$status,$score,$disposable,$role" >> "$output_file"
# Progress indicator
echo -n "."
done < "$input_file"
echo ""
echo "Results saved to $output_file"Webhook 핸들러
// webhook-handler.js - 웹훅 이벤트에서 이메일 검증
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/new-signup', async (req, res) => {
const { email, userId } = req.body;
// Verify the email
const verifyResponse = 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 verifyResponse.json();
if (result.status === 'invalid' || result.result.disposable) {
// Flag the user for review
console.log(`Flagged user ${userId}: ${email} - ${result.status}`);
// await flagUser(userId, 'suspicious_email');
}
res.json({ verified: true, result });
});
app.listen(3000);