Skip to content
SMTP Verification

SMTP Verification

The verify command connects to a domain’s MX server and performs an SMTP RCPT TO check to determine whether a specific mailbox exists.

How It Works

1. Resolve MX records for the target domain
2. Connect to the primary MX server on port 25
3. Send EHLO, MAIL FROM, and RCPT TO commands
4. Parse the server response code:
   - 2xx: mailbox accepted
   - 4xx: temporary failure (greylisting, rate limiting)
   - 5xx: mailbox rejected (does not exist, or policy block)

Basic Usage

smtp-probe verify user@example.com

Port 25 Requirements

SMTP verification requires outbound access to TCP port 25. Most cloud providers (AWS, GCP, Azure, Alibaba Cloud) block this port by default. You will need to request a port 25 exemption or run smtp-probe from infrastructure that allows outbound port 25.

The check command (DNS-based) works without port 25.

Bind IP

Send SMTP connections from a specific IP address (useful when your server has multiple outbound IPs):

smtp-probe verify user@example.com --bind-ip 1.2.3.4

Timeout

Adjust the connection and response timeout:

smtp-probe verify user@example.com --timeout 30s

Combined with Disposable Email Detection

Skip the SMTP handshake entirely if the domain is a known disposable provider:

smtp-probe verify user@mailinator.com --disposable

Combined with IP Pool

Use the IP pool for automatic failover — if one IP gets blocked, the next healthy IP is tried:

smtp-probe verify user@example.com --pool

Response Codes

Code RangeMeaning
2xxMailbox accepted / exists
4xxTemporary rejection (retry later)
5xxPermanent rejection (does not exist or policy block)
A 5xx response does not always mean the mailbox does not exist. Some providers return 550 as a catch-all rejection to prevent address harvesting.