Skip to main content

How to Verify an Email Address: Step-by-Step Guide

Whether you need to check one address or clean an entire list, here are the manual and automated methods available — with honest tradeoffs for each.

Why Verify Before You Send?

Sending to unverified addresses risks hard bounces, spam complaints, and damage to your sender reputation. A 2% bounce rate can trigger ESP throttling. A 0.10% complaint rate triggers Gmail filtering. Verification eliminates both risks at the source.

Verification also protects your domain from being associated with poor-quality sending — reputation damage that can persist for months even after you clean up your list.

Method 1: Manual Syntax Check

The simplest check is confirming the address follows valid email syntax per RFC 5322:

Valid syntax pattern:

[email protected]

Common syntax errors to catch:

user@ — missing domain
user@@domain.com — double @
user@domain — missing TLD
user @domain.com — space in local part

Syntax checking alone catches typos but cannot determine if the address is actually live. It is a necessary first step, not a complete solution.

Method 2: Manual DNS / MX Record Lookup

After confirming valid syntax, check whether the domain has mail exchange (MX) records — DNS entries that specify which servers handle incoming mail for that domain.

Run this in your terminal (macOS / Linux):

nslookup -type=MX gmail.com

Or using dig:

dig MX gmail.com +short

If no MX records are returned, the domain cannot receive mail. No MX means a guaranteed hard bounce.

MX checks confirm the domain can receive mail but cannot confirm the specific mailbox exists. A domain might have MX records while [email protected] does not exist.

Method 3: Manual SMTP Handshake

The most thorough manual method is an SMTP handshake — connecting to the mail server and asking whether the mailbox exists without sending a message.

Manual SMTP check (terminal):

telnet alt1.gmail-smtp-in.l.google.com 25
# After connection:
EHLO yourdomain.com
MAIL FROM: <[email protected]>
# 250 OK = mailbox exists
# 550 = does not exist

This works for many domains but has significant limitations: catch-all domains always return 250, many servers block port 25 from residential IPs, and greylisting may cause false negatives. It is also completely impractical at scale.

Method 4: Automated Verification with FareOf

All three checks in under 2 seconds

FareOf combines syntax, MX, SMTP, disposable detection, catch-all detection, and role account flagging into a single API call. For bulk lists, upload a CSV and receive results in minutes.

Single address: use the form above — no account required
Bulk upload: CSV up to 1M rows via dashboard
Real-time API: integrate into your sign-up form or CRM
Results: valid / invalid / risky / disposable / catch-all with confidence score

Manual vs Automated: Comparison

MethodAccuracyScaleTime per address
Syntax checkLowAny< 1ms
MX record lookupMediumAny~100ms
Manual SMTPHigh*1–10 addresses5–30 seconds
FareOf APIHigh (98%+)Unlimited< 2 seconds

* Manual SMTP accuracy limited by catch-all domains and server-side blocking.

Verify any email address now — free

Single checks need no account. Bulk verification and API access available on any FareOf plan.

Try the verifier

Related Guides