Developer Guide

Email Verification API: The Complete Developer Guide (2025)

July 7, 2025 · 10 min read

Email verification is one of those things that sounds simple until you actually try to build it. You send a SMTP command, check the response code, done — right?

Wrong. Gmail, Yahoo, Outlook, iCloud, and QQ together cover over 80% of all email addresses on the internet, and all of them have blocked SMTP-based verification. This guide explains how email verification actually works in 2025, and how to integrate it correctly.

How Email Verification Works

There are several layers of verification, applied in order from cheapest to most accurate:

  1. Syntax check — Does it match the RFC 5322 email format?
  2. MX record lookup — Does the domain have mail servers configured?
  3. Disposable email detection — Is it from a known throwaway domain?
  4. SMTP verification — Does the mailbox actually accept mail?
  5. Provider-specific checks — For providers that block SMTP, query their own account systems directly.

Most email verification services stop at layer 4. The problem: layers 1-3 are fast but low-accuracy. Layer 4 fails silently for all major consumer providers. Layer 5 is the only reliable method for Gmail, Yahoo, iCloud, QQ, and the others.

Why SMTP Fails for Major Providers

ProviderSMTP BehaviorResult
GmailRejects all standard SMTP commands probesAlways "unknown"
YahooCatch-all — accepts everythingAlways "valid" (false positives)
iCloudAccepts all, returns 250 OKAlways "valid" (false positives)
QQ MailBlocks external SMTP connectionsAlways "unknown"
Outlook/HotmailRate-limits and returns inconsistent resultsUnreliable
If your verification service returns "unknown" for Gmail addresses, or "valid" for every Yahoo address regardless of whether they exist — this is why. The service is relying on SMTP, which doesn't work for these providers.

Provider-Specific Verification Methods

The reliable approach is to query each provider's native APIs:

Quick Integration Examples

Python

import requests

API_KEY = "mvp_your_key"  # Get free at checkmail1.com

def verify(email):
    r = requests.get(
        "https://checkmail1.com/api/verify",
        params={"email": email},
        headers={"X-API-Key": API_KEY}
    )
    return r.json()

result = verify("[email protected]")
print(result["status"])       # valid / invalid / unknown
print(result["score"])        # 0-100
print(result["confidence"])   # high / medium / low

Node.js

const fetch = require('node-fetch');

async function verify(email) {
  const res = await fetch(
    `https://checkmail1.com/api/verify?email=${encodeURIComponent(email)}`,
    { headers: { 'X-API-Key': 'mvp_your_key' } }
  );
  return res.json();
}

verify('[email protected]').then(r => {
  console.log(r.status, r.score, r.confidence);
});

PHP

<?php
function verifyEmail($email, $apiKey) {
    $url = 'https://checkmail1.com/api/verify?email=' . urlencode($email);
    $ctx = stream_context_create(['http' => [
        'header' => "X-API-Key: $apiKey
"
    ]]);
    return json_decode(file_get_contents($url, false, $ctx), true);
}

$result = verifyEmail('[email protected]', 'mvp_your_key');
echo $result['status']; // valid / invalid / unknown

Bulk Verification (Up to 1,000,000 Emails)

For large lists, use the bulk upload endpoint — upload a CSV or TXT file and download results when complete:

# Upload a file
curl -X POST https://checkmail1.com/api/batch/upload \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -F "[email protected]"

# Returns: {"job_id": "abc123", "total_emails": 50000, "status": "queued"}

# Poll for progress
curl https://checkmail1.com/api/batch/jobs/abc123 \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

# Download results when done
curl "https://checkmail1.com/api/batch/jobs/abc123/download?token=YOUR_TOKEN" \
  -o results.csv

API Response Reference

FieldValuesDescription
statusvalid / invalid / risky / unknownOverall verdict
validtrue / false / nullBoolean result
score0–100Quality/confidence score
confidencehigh / medium / lowHow reliable the result is
checks.google{checked, exists}Google-specific result
credits_remainingintegerCredits left after this request

Pricing

CheckMail1 uses credit-based pricing — pay once, use whenever. No subscriptions, no monthly fees. Credits never expire.

Payment accepted via USDT TRC20 — no credit card required.

Start Verifying Emails Free

100 free credits on signup. Accurate results for Gmail, Yahoo, iCloud, QQ, Outlook, and 50+ more providers.

Get Free API Key →