BillionVerify LogoBillionVerify

Node.js

Node.js 이메일 검증 SDK. JavaScript로 이메일을 설치·설정·검증하는 코드 예제 포함.

공식 BillionVerify Node.js SDK는 Node.js 애플리케이션에 이메일 검증을 통합하는 간단하고 효율적인 방법을 제공합니다.

설치

npm install billionverify-sdk
# or
yarn add billionverify-sdk
# or
pnpm add billionverify-sdk

빠른 시작

import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

// Verify a single email
const result = await client.verify('user@example.com');
console.log(result.status); // 'valid', 'invalid', 'unknown', or 'catchall'

구성

클라이언트 옵션

const client = new BillionVerify({
  apiKey: 'your-api-key',

  // Optional configurations
  timeout: 30000,           // Request timeout in ms (default: 30000)
  retries: 3,               // Number of retry attempts (default: 3)
  baseUrl: 'https://api.billionverify.com', // Custom API URL
});

환경 변수

API 키를 환경 변수에 저장하는 것을 권장합니다:

# .env
BV_API_KEY=your_api_key_here
import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

단일 이메일 검증

기본 검증

const result = await client.verify('user@example.com');

console.log({
  email: result.email,
  status: result.status,
  score: result.score,
  deliverable: result.result.deliverable,
  disposable: result.result.disposable,
  role: result.result.role,
});

옵션을 사용한 검증

const result = await client.verify('user@example.com', {
  smtpCheck: true,      // Enable SMTP verification
  timeout: 5000,        // Custom timeout for this request
});

응답 구조

interface VerificationResult {
  email: string;
  status: 'valid' | 'invalid' | 'unknown' | 'catchall';
  result: {
    deliverable: boolean | null;
    valid_format: boolean;
    valid_domain: boolean;
    valid_mx: boolean;
    disposable: boolean;
    role: boolean;
    catchall: boolean;
    free: boolean;
    smtp_valid: boolean | null;
  };
  score: number;
  reason: string | null;
}

대량 검증

대량 작업 제출

const emails = [
  'user1@example.com',
  'user2@example.com',
  'user3@example.com',
];

const job = await client.verifyBulk(emails);
console.log(`Job ID: ${job.id}`);
console.log(`Status: ${job.status}`);

작업 상태 확인

const status = await client.getBulkJobStatus(job.id);

console.log({
  id: status.id,
  status: status.status,      // 'pending', 'processing', 'completed', 'failed'
  total: status.total,
  processed: status.processed,
  valid: status.valid,
  invalid: status.invalid,
});

결과 가져오기

// Wait for job completion
const results = await client.getBulkJobResults(job.id);

for (const result of results) {
  console.log(`${result.email}: ${result.status}`);
}

웹훅 알림

폴링 대신 작업 완료 시 알림을 받을 웹훅을 구성할 수 있습니다:

const job = await client.verifyBulk(emails, {
  webhookUrl: 'https://your-domain.com/webhooks/billionverify',
});

크레딧 관리

사용 가능한 크레딧 확인

const credits = await client.getCredits();

console.log({
  available: credits.available,
  used: credits.used,
  total: credits.total,
});

오류 처리

오류 유형

import {
  BillionVerify,
  BillionVerifyError,
  AuthenticationError,
  RateLimitError,
  ValidationError,
} from 'billionverify-sdk';

try {
  const result = await client.verify('invalid-email');
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error('Invalid API key');
  } else if (error instanceof RateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter} seconds`);
  } else if (error instanceof ValidationError) {
    console.error(`Invalid input: ${error.message}`);
  } else if (error instanceof BillionVerifyError) {
    console.error(`API error: ${error.message}`);
  }
}

재시도 로직

SDK는 지수 백오프를 사용하여 실패한 요청을 자동으로 재시도합니다:

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
  retries: 5,                    // Max retry attempts
  retryDelay: 1000,              // Initial delay in ms
  retryMaxDelay: 30000,          // Max delay between retries
});

프레임워크 통합

Express.js

import express from 'express';
import { BillionVerify } from 'billionverify-sdk';

const app = express();
const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

app.post('/api/verify-email', async (req, res) => {
  const { email } = req.body;

  try {
    const result = await client.verify(email);

    if (result.status === 'invalid') {
      return res.status(400).json({
        valid: false,
        message: 'Please enter a valid email address',
      });
    }

    if (result.result.disposable) {
      return res.status(400).json({
        valid: false,
        message: 'Disposable emails are not allowed',
      });
    }

    res.json({ valid: true, result });
  } catch (error) {
    res.status(500).json({ error: 'Verification failed' });
  }
});

Fastify

import Fastify from 'fastify';
import { BillionVerify } from 'billionverify-sdk';

const fastify = Fastify();
const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

fastify.post('/verify', async (request, reply) => {
  const { email } = request.body;
  const result = await client.verify(email);
  return result;
});

Next.js API Route

// pages/api/verify.js
import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ error: 'Method not allowed' });
  }

  const { email } = req.body;

  try {
    const result = await client.verify(email);
    res.status(200).json(result);
  } catch (error) {
    res.status(500).json({ error: 'Verification failed' });
  }
}

완전한 예시

이메일 검증을 포함한 사용자 등록

import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

async function validateRegistrationEmail(email) {
  const result = await client.verify(email);

  // Reject invalid emails
  if (result.status === 'invalid') {
    return {
      valid: false,
      reason: 'invalid_email',
      message: 'This email address is invalid',
    };
  }

  // Reject disposable emails
  if (result.result.disposable) {
    return {
      valid: false,
      reason: 'disposable',
      message: 'Please use a permanent email address',
    };
  }

  // Warn about role-based emails
  if (result.result.role) {
    return {
      valid: true,
      warning: 'role_based',
      message: 'Using a personal email is recommended',
    };
  }

  // Accept valid emails
  return {
    valid: true,
    score: result.score,
  };
}

// Usage
const validation = await validateRegistrationEmail('user@example.com');
if (!validation.valid) {
  console.error(validation.message);
}

TypeScript 지원

SDK에는 TypeScript 정의가 기본으로 포함되어 있습니다:

import {
  BillionVerify,
  VerificationResult,
  BulkJob,
  ClientOptions
} from 'billionverify-sdk';

const options: ClientOptions = {
  apiKey: process.env.BV_API_KEY!,
  timeout: 30000,
};

const client = new BillionVerify(options);

const result: VerificationResult = await client.verify('user@example.com');

다음 단계

On this page