EmailVerify LogoEmailVerify

Codex CLI

Email checker with OpenAI Codex CLI. Verify emails in Codex automation.

OpenAI Codex CLI 提供 AI 驅動的程式碼生成和終端輔助。了解如何整合 EmailVerify 進行郵箱驗證任務。

什麼是 Codex CLI?

Codex CLI 是 OpenAI 的命令列工具,利用 Codex 模型提供:

  • 自然語言到程式碼的轉換
  • Shell 命令生成
  • 程式碼補全和除錯
  • 任務自動化

設定

安裝 EmailVerify CLI

npm install -g @emailverify/cli
bv config set api-key 您的_API_金鑰

配置環境

export EMAILVERIFY_API_KEY=您的-api-金鑰
export OPENAI_API_KEY=您的-openai-金鑰

使用範例

生成驗證腳本

提示: 編寫一個 Python 腳本,使用 EmailVerify API 驗證郵箱清單

Codex 輸出:

import os
import requests
from typing import List, Dict

def verify_emails(emails: List[str]) -> List[Dict]:
    """使用 EmailVerify API 驗證郵箱地址清單。"""
    api_key = os.environ.get('EMAILVERIFY_API_KEY')
    results = []

    for email in emails:
        response = requests.post(
            'https://api.emailverify.ai/v1/verify',
            headers={
                'Authorization': f'Bearer {api_key}',
                'Content-Type': 'application/json',
            },
            json={'email': email}
        )
        results.append(response.json())

    return results

def main():
    emails = [
        'test@example.com',
        'user@gmail.com',
        'fake@mailinator.com',
    ]

    results = verify_emails(emails)

    for result in results:
        status = '✅' if result['status'] == 'valid' else '❌'
        print(f"{status} {result['email']}: {result['status']}")

if __name__ == '__main__':
    main()

生成 Shell 命令

提示: 驗證 CSV 檔案第二列中所有郵箱的單行命令

Codex 輸出:

cut -d',' -f2 users.csv | tail -n +2 | while read email; do bv verify "$email" --quiet && echo "✅ $email" || echo "❌ $email"; done

生成測試用例

提示: 為郵箱驗證函式生成 Jest 測試

Codex 輸出:

import { verifyEmail } from './email-service';

describe('郵箱驗證', () => {
  beforeAll(() => {
    process.env.EMAILVERIFY_API_KEY = 'test-api-key';
  });

  test('驗證正確的郵箱格式', async () => {
    const result = await verifyEmail('user@example.com');
    expect(result).toHaveProperty('status');
    expect(result).toHaveProperty('score');
  });

  test('拒絕無效的郵箱格式', async () => {
    const result = await verifyEmail('not-an-email');
    expect(result.status).toBe('invalid');
  });

  test('檢測臨時郵箱', async () => {
    const result = await verifyEmail('test@mailinator.com');
    expect(result.result.disposable).toBe(true);
  });

  test('妥善處理 API 錯誤', async () => {
    // 模擬網路錯誤
    const result = await verifyEmail('test@example.com');
    expect(result).not.toBeNull();
  });
});

生成 API 整合

提示: 建立帶快取的 EmailVerify 整合 Node.js 模組

Codex 輸出:

import NodeCache from 'node-cache';

interface VerificationResult {
  email: string;
  status: 'valid' | 'invalid' | 'unknown';
  score: number;
  result: {
    deliverable: boolean;
    disposable: boolean;
    role: boolean;
  };
}

class EmailVerifyClient {
  private apiKey: string;
  private cache: NodeCache;
  private baseUrl = 'https://api.emailverify.ai/v1';

  constructor(apiKey: string, cacheTTL: number = 3600) {
    this.apiKey = apiKey;
    this.cache = new NodeCache({ stdTTL: cacheTTL });
  }

  async verify(email: string): Promise<VerificationResult> {
    // 首先檢查快取
    const cached = this.cache.get<VerificationResult>(email);
    if (cached) return cached;

    const response = await fetch(`${this.baseUrl}/verify`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email }),
    });

    const result = await response.json();

    // 快取結果
    this.cache.set(email, result);

    return result;
  }

  async verifyBulk(emails: string[]): Promise<VerificationResult[]> {
    const response = await fetch(`${this.baseUrl}/verify/bulk`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ emails }),
    });

    return response.json();
  }
}

export default EmailVerifyClient;

程式碼生成模式

模式 1: 驗證中介軟體

提示: Express 中介軟體,用於驗證請求體中的郵箱

import { Request, Response, NextFunction } from 'express';

export const validateEmail = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  const { email } = req.body;

  if (!email) {
    return res.status(400).json({ error: '郵箱地址是必需的' });
  }

  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();

  if (result.status === 'invalid') {
    return res.status(400).json({ error: '無效的郵箱地址' });
  }

  if (result.result.disposable) {
    return res.status(400).json({ error: '不允許使用臨時郵箱' });
  }

  req.verificationResult = result;
  next();
};

模式 2: React Hook

提示: 帶防抖的郵箱驗證 React hook

import { useState, useEffect } from 'react';
import { useDebouncedCallback } from 'use-debounce';

interface VerificationState {
  isLoading: boolean;
  isValid: boolean | null;
  result: any;
  error: string | null;
}

export function useEmailVerification(debounceMs: number = 500) {
  const [state, setState] = useState<VerificationState>({
    isLoading: false,
    isValid: null,
    result: null,
    error: null,
  });

  const verify = useDebouncedCallback(async (email: string) => {
    if (!email || !email.includes('@')) {
      setState({ isLoading: false, isValid: null, result: null, error: null });
      return;
    }

    setState(prev => ({ ...prev, isLoading: true, error: null }));

    try {
      const response = await fetch('/api/verify-email', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ email }),
      });

      const result = await response.json();

      setState({
        isLoading: false,
        isValid: result.status === 'valid',
        result,
        error: null,
      });
    } catch (error) {
      setState({
        isLoading: false,
        isValid: null,
        result: null,
        error: '驗證失敗',
      });
    }
  }, debounceMs);

  return { ...state, verify };
}

下一步

On this page