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.comPort 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.4Timeout
Adjust the connection and response timeout:
smtp-probe verify user@example.com --timeout 30sCombined with Disposable Email Detection
Skip the SMTP handshake entirely if the domain is a known disposable provider:
smtp-probe verify user@mailinator.com --disposableCombined 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 --poolResponse Codes
| Code Range | Meaning |
|---|---|
2xx | Mailbox accepted / exists |
4xx | Temporary rejection (retry later) |
5xx | Permanent 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.