SMTP Email Verification API
An MX record confirms the domain can receive email. SMTP verification confirms the specific mailbox exists. Mailbeam does both in a single API call.
What Mailbeam checks
Every verification runs 7 checks in parallel and returns a structured result in under 100ms.
Direct SMTP handshake
Mailbeam connects to the target mail server and executes EHLO + MAIL FROM + RCPT TO to test whether the specific mailbox is accepted — without delivering a message.
Multi-hop MX handling
Domains with multiple MX records are handled in priority order. If the primary server is unresponsive, Mailbeam falls back to secondary MX records automatically.
SMTP check result in response
The `smtp_check` boolean in the response tells you specifically whether the SMTP handshake succeeded, independent of the overall `valid` composite result.
Graceful handling of probe-blocking servers
Google, Microsoft, and some enterprise mail servers block direct SMTP probes. When probing is blocked, Mailbeam uses domain-level signals and historical data to estimate deliverability and returns `status: unknown` instead of a false negative.
Distinct from MX-only check
MX validation confirms the domain has mail infrastructure. SMTP verification confirms the individual mailbox (the username before @) exists. Both checks run in every request.
Parallel execution with other checks
The SMTP probe runs in parallel with syntax, MX, disposable, role, and AI scoring. It does not add to the total response time.
How it works
MX records fetched
Mailbeam resolves the domain's MX records to identify the responsible mail server. Records are cached for common domains to reduce DNS lookup latency.
SMTP connection opened
A TCP connection is opened to the highest-priority MX server on port 25 (or 587 for submission-only servers). Mailbeam sends EHLO to identify itself.
RCPT TO command sent
Mailbeam issues MAIL FROM with a probe address and RCPT TO with the target address. The server's response code (250 = accepted, 550 = rejected) determines mailbox existence.
Connection closed, result returned
Mailbeam sends QUIT and closes the connection without delivering any email. The RCPT TO response code is included in the verify result as `smtp_check: true/false`.
Integrate in minutes
import mailbeam
import asyncio
mb = mailbeam.AsyncClient(api_key=os.environ["MAILBEAM_KEY"])
async def verify_with_smtp_detail(email: str) -> dict:
result = await mb.verify(email)
print(f"SMTP check: {result.smtp_check}")
print(f"MX check: {result.mx_check}")
print(f"Status: {result.status}")
print(f"Score: {result.score}")
if result.status == "unknown":
# SMTP probing was blocked (likely Google/Microsoft)
# Use score as a confidence signal
if result.score >= 60:
return {"action": "allow", "reason": "domain_signals_positive"}
else:
return {"action": "review", "reason": "low_confidence_unknown"}
if not result.valid:
return {"action": "reject", "reason": result.status}
return {"action": "allow", "reason": "smtp_verified"}
# Usage
result = asyncio.run(verify_with_smtp_detail("user@company.com"))
print(result)When to use it
B2B outreach list validation
Before sending a cold outreach sequence, SMTP verification confirms that the specific contacts you've identified at a company domain actually have active mailboxes.
Critical transactional email validation
Before sending invoices, contracts, or onboarding emails to new accounts, SMTP-verify the address to avoid a hard bounce on a high-value communication.
Catch-all domain disambiguation
For domains where MX passes but the catch-all flag is set, SMTP probing is still attempted. The combination of smtp_check result and AI score gives the most accurate verdict for corporate addresses.
Hard bounce prevention at scale
For email campaigns where sender reputation is a concern, SMTP verification at import time eliminates the class of hard bounces that come from non-existent mailboxes.
Frequently asked questions
Ready to integrate?
Free tier includes 1,000 verifications/month. No credit card required.