Dev.to WebDev 🛠 Dev 👁 0 📖 2 min read

Building smtp-probe: An Open-Source Go CLI for Email Deliverability Diagnostics

Ever sent an email campaign only to realize half your list was full of typos, role accounts, or domains that don't exist? I built smtp-probe to solve exactly that problem — a single Go CLI tool that runs every email deli

Ever sent an email campaign only to realize half your list was full of typos, role accounts, or domains that don't exist? I built smtp-probe to solve exactly that problem — a single Go CLI tool that runs every email deliverability check you need, right from the command line.

The Problem

When you're managing email sending infrastructure, you need to diagnose deliverability issues constantly:

  • Is this IP/domain on a blacklist?
  • Are the DNS records (SPF, DKIM, DMARC) configured correctly?
  • Does this email address actually exist?
  • Is this a disposable email or a role account?

Most tools are either proprietary SaaS platforms or cover only one aspect. I wanted everything in one open-source tool.

What smtp-probe Does

DNS Health Scoring

Checks SPF, DKIM, DMARC, PTR, and MX records, then gives you a 0-100 health score:

$ smtp-probe check gmail.com
DNS Score: 95/100 ✓
  SPF: pass
  DKIM: pass
  DMARC: pass
  PTR: valid
  MX: 5 servers found

SMTP RCPT TO Verification

Verifies email addresses by connecting to the mail server and running the RCPT TO command — with support for binding to specific source IPs:

$ smtp-probe verify [email protected] --bind-ip 1.2.3.4
Status: Valid
SMTP Code: 250

Role-Based Email Detection (NEW in v0.1.3)

Automatically identifies non-personal addresses like admin@, support@, sales@, info@ and classifies them into categories (NOTIFICATION, MARKETING, MEETING, OTHER):

$ smtp-probe verify [email protected]
Role: Yes (NOTIFICATION)
Status: Invalid or Unreachable
SMTP Code: 550

Domain Typo Correction (NEW in v0.1.3)

Catches common typos using Levenshtein edit distance across 20+ email providers and 80+ TLDs:

$ smtp-probe verify [email protected]
Suggestion: Did you mean [email protected]?
Status: Invalid or Unreachable
Error: connection failed

The v0.1.3 fix also catches parked domains with valid MX records (e.g., gmial.com has MX but unreachable SMTP).

RBL Blacklist Scanning

Scans your sending IP against 29 blocklists including Spamhaus, Barracuda, SpamCop, and more:

$ smtp-probe rbl 1.2.3.4
Checking 29 lists...
  spamhaus.zen: LISTED ⚠️
  barracuda: CLEAN ✓
  spamcop: CLEAN ✓
  ...

Disposable Email Detection

Flags ~74,000 known disposable email domains from 4 upstream sources.

Architecture

Built in Go with Cobra CLI. Key packages:

  • pkg/probe — Core verification pipeline (DNS → SMTP → Role detection → Suggestion → Blacklist)
  • pkg/role — Role-based email prefix dictionary with category classification
  • pkg/suggestion — Levenshtein-based domain typo engine
  • server/ — REST HTTP API for programmatic use

Try It

Online demo: probe.uspeedo.online

Install:

bash <(curl -fsSL https://raw.githubusercontent.com/monto-fe/smtp-probe/main/install.sh)

GitHub: github.com/monto-fe/smtp-probe

Stars, issues, and PRs are welcome! We just launched v0.1.3 — would love your feedback on what to build next.

Built with Go, open-sourced under MIT license.

📰 Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.