DEV Community

sky yv
sky yv

Posted on

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 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
Enter fullscreen mode Exit fullscreen mode

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 user@example.com --bind-ip 1.2.3.4
Status: Valid
SMTP Code: 250
Enter fullscreen mode Exit fullscreen mode

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 admin@qq.com
Role: Yes (NOTIFICATION)
Status: Invalid or Unreachable
SMTP Code: 550
Enter fullscreen mode Exit fullscreen mode

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 xxxx@gmial.com
Suggestion: Did you mean xxxx@gmail.com?
Status: Invalid or Unreachable
Error: connection failed
Enter fullscreen mode Exit fullscreen mode

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 ✓
  ...
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)