EmailVerify LogoEmailVerify

OpenCode

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

OpenCode 是一个开源的终端 AI 编程助手。了解如何在 OpenCode 工作流中使用 EmailVerify 进行邮箱验证。

什么是 OpenCode?

OpenCode 是一个社区驱动的开源 AI 编程助手,提供:

  • 自然语言代码生成
  • Shell 命令执行
  • 代码审查和调试
  • 与本地和云 LLM 集成

设置

安装 EmailVerify CLI

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

配置环境

添加到您的 shell 配置:

export EMAILVERIFY_API_KEY=your-api-key

使用 OpenCode

基础验证

您: 使用 bv 命令验证 user@company.com 是否是有效邮箱

OpenCode:

我会运行 EmailVerify CLI 检查该邮箱。

$ bv verify user@company.com

邮箱: user@company.com
状态: 有效
分数: 0.92
可投递: 是
一次性: 否
角色: 否

该邮箱有效且安全可用。

生成验证代码

您: 创建一个使用 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(`验证失败: ${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
"""
通过验证邮箱地址来清理用户数据库。
将无效的邮箱移到单独的表中供审核。
"""
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:
    """验证单个邮箱地址。"""
    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]:
    """处理所有用户并按邮箱有效性分类。"""
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()

    # 如果不存在则创建无效邮箱表
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS invalid_emails (
            user_id INTEGER,
            email TEXT,
            reason TEXT,
            verified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    ''')

    # 获取所有用户
    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

        # 限流
        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'结果: {valid} 个有效, {invalid} 个无效, {unknown} 个未知')

CI/CD 集成

您: 将邮箱验证添加到我的 GitHub Actions 工作流

OpenCode:

# .github/workflows/verify-test-emails.yml
name: 验证测试邮箱

on:
  pull_request:
    paths:
      - 'test/**'
      - 'fixtures/**'

jobs:
  verify-emails:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 设置 Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 安装 EmailVerify CLI
        run: npm install -g @emailverify/cli

      - name: 提取并验证邮箱
        env:
          EMAILVERIFY_API_KEY: ${{ secrets.EMAILVERIFY_API_KEY }}
        run: |
          # 在测试文件中查找所有邮箱地址
          emails=$(grep -rhoE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' test/ fixtures/ | sort -u)

          echo "找到待验证的邮箱:"
          echo "$emails"

          # 验证每个邮箱
          failed=0
          for email in $emails; do
            # 跳过 example.com 和测试域名
            if [[ "$email" =~ @(example\.(com|org|net)|test\.com)$ ]]; then
              echo "⏭️ 跳过测试域名: $email"
              continue
            fi

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

            if [ "$status" = "valid" ]; then
              echo "⚠️ 在测试中发现真实邮箱: $email"
              failed=1
            fi
          done

          if [ $failed -eq 1 ]; then
            echo "::error::在测试文件中发现真实邮箱地址!"
            exit 1
          fi

          echo "✅ 测试文件中没有真实邮箱"

自动化配方

批量处理脚本

#!/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"

    # 进度指示器
    echo -n "."
done < "$input_file"

echo ""
echo "结果已保存到 $output_file"

Webhook 处理器

// webhook-handler.js - 从 webhook 事件中验证邮箱

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook/new-signup', async (req, res) => {
  const { email, userId } = req.body;

  // 验证邮箱
  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) {
    // 标记用户供审核
    console.log(`已标记用户 ${userId}: ${email} - ${result.status}`);
    // await flagUser(userId, 'suspicious_email');
  }

  res.json({ verified: true, result });
});

app.listen(3000);

下一步

On this page