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