<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OutSend</title>
    <description>The latest articles on DEV Community by OutSend (@outsendxyz).</description>
    <link>https://dev.to/outsendxyz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4033560%2F1681d315-8bde-4fe6-93fb-6e9331be97c8.png</url>
      <title>DEV Community: OutSend</title>
      <link>https://dev.to/outsendxyz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/outsendxyz"/>
    <language>en</language>
    <item>
      <title>Verifying B2B emails without sending a single one: how MX-only validation actually works</title>
      <dc:creator>OutSend</dc:creator>
      <pubDate>Tue, 21 Jul 2026 12:08:08 +0000</pubDate>
      <link>https://dev.to/outsendxyz/verifying-b2b-emails-without-sending-a-single-one-how-mx-only-validation-actually-works-3pnc</link>
      <guid>https://dev.to/outsendxyz/verifying-b2b-emails-without-sending-a-single-one-how-mx-only-validation-actually-works-3pnc</guid>
      <description>&lt;p&gt;When you're building or using a B2B prospecting tool, "verified email" usually means one of two things: a real SMTP handshake (connect, &lt;code&gt;MAIL FROM&lt;/code&gt;, &lt;code&gt;RCPT TO&lt;/code&gt;, read the response, disconnect without sending) or a lighter DNS-only check. Most articles about email verification gloss over &lt;em&gt;why&lt;/em&gt; you'd pick one over the other. This post walks through the mechanics, the tradeoffs, and a real-world constraint that forces the decision for a lot of small/medium senders: &lt;strong&gt;outbound port 25 being blocked.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The three layers of "is this email real"
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Syntax check&lt;/strong&gt; — regex/RFC 5322 parsing. Catches typos (&lt;code&gt;jhon@gmial.com&lt;/code&gt;), catches obviously malformed input. Cheap, instant, but tells you almost nothing about deliverability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS / MX check&lt;/strong&gt; — does the domain have valid MX records? Does it resolve? This confirms the &lt;em&gt;domain&lt;/em&gt; can receive mail, not that the &lt;em&gt;mailbox&lt;/em&gt; exists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMTP handshake (no send)&lt;/strong&gt; — connect to the MX host on port 25, issue &lt;code&gt;RCPT TO:&amp;lt;address&amp;gt;&lt;/code&gt;, read the server's response code (250 = accepted, 550 = mailbox doesn't exist, etc.), then &lt;code&gt;QUIT&lt;/code&gt; before &lt;code&gt;DATA&lt;/code&gt;. This is the only layer that actually confirms mailbox existence — and it's also the layer most likely to break in production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why the SMTP handshake breaks for so many senders
&lt;/h2&gt;

&lt;p&gt;Outbound TCP port 25 is blocked by default on most consumer ISPs and a growing number of cloud/VPS providers (it's one of the oldest anti-spam measures on the internet — stops compromised machines from becoming open relays). If your verification worker runs on a box where port 25 egress is blocked, every &lt;code&gt;RCPT TO&lt;/code&gt; attempt just times out. You get zero signal, not a "550 doesn't exist" — just silence, indistinguishable from a slow mail server.&lt;/p&gt;

&lt;p&gt;Three ways to deal with this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Route SMTP checks through infrastructure with confirmed port 25 egress&lt;/strong&gt; (a subset of your VPS fleet, or a dedicated relay you control). Works, but adds an ops dependency you now have to monitor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay for a third-party verification API&lt;/strong&gt; that already solved this problem. Fine at low volume, expensive fast, and you're trusting an external service with your prospect list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fall back to MX-only + heuristics&lt;/strong&gt; when port 25 is unavailable, and be honest about the confidence level of the result instead of pretending it's a full SMTP verification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We went with the third option for our own scraper/enrichment pipeline: when port 25 egress isn't available on a given worker, the check degrades gracefully to "domain has valid MX, catch-all detection where possible, syntax valid" rather than silently returning a false "verified." The label shown to the end user reflects which layer actually ran — "MX confirmed" is not the same claim as "mailbox confirmed," and conflating the two is how verification tools end up with inflated "95% deliverable" numbers that don't survive contact with a real campaign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Catch-all domains are the other trap
&lt;/h2&gt;

&lt;p&gt;Even with full SMTP access, a lot of corporate mail servers respond &lt;code&gt;250 OK&lt;/code&gt; to &lt;em&gt;any&lt;/em&gt; &lt;code&gt;RCPT TO&lt;/code&gt; on their domain (catch-all configuration) — meaning a successful handshake doesn't actually prove the specific mailbox exists. Standard mitigation: probe a random, almost-certainly-nonexistent local part (&lt;code&gt;asdkjh1928@domain.com&lt;/code&gt;) on the same domain. If that also comes back 250, the domain is catch-all and your original address's "verified" status should be downgraded to "plausible, unconfirmed" rather than reported as a clean hit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical takeaway
&lt;/h2&gt;

&lt;p&gt;If you're evaluating (or building) an email verification step in a prospecting pipeline, ask two questions before trusting a "valid" badge:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Did this go through an actual SMTP handshake, or just an MX/DNS check? (Both are useful — they are not the same guarantee.)&lt;/li&gt;
&lt;li&gt;Was catch-all detection run, and how does the tool label a catch-all hit vs. a genuinely confirmed mailbox?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most vendors don't surface this distinction because "98% verified" sells better than "72% SMTP-confirmed, 26% MX-only (port 25 blocked on this worker), catch-all flagged separately." We'd rather ship the second, less flattering number, because it's the one that actually predicts bounce rate.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We build &lt;a href="https://outsend.xyz" rel="noopener noreferrer"&gt;OutSend&lt;/a&gt;, an all-in-one B2B lead generation platform — Google Maps scraping, email enrichment, deliverability verification and no-code pipelines chained end-to-end. Free during alpha, no credit card required. This post describes real constraints we hit building the verification layer, not a product pitch — happy to go deeper on any of it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>dns</category>
      <category>backend</category>
    </item>
    <item>
      <title>OutSend: an all-in-one B2B lead generation tool (Google Maps scraping, email finder, deliverability check)</title>
      <dc:creator>OutSend</dc:creator>
      <pubDate>Fri, 17 Jul 2026 09:51:20 +0000</pubDate>
      <link>https://dev.to/outsendxyz/outsend-an-all-in-one-b2b-lead-generation-tool-google-maps-scraping-email-finder-deliverability-4m6a</link>
      <guid>https://dev.to/outsendxyz/outsend-an-all-in-one-b2b-lead-generation-tool-google-maps-scraping-email-finder-deliverability-4m6a</guid>
      <description>&lt;p&gt;We built OutSend because prospecting for B2B leads usually means stitching together 3-4 different tools: a Google Maps scraper, an email finder, an email verifier, and a spreadsheet to tie it all together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;OutSend is an all-in-one B2B lead generation platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scrape&lt;/strong&gt; business leads from Google Maps by city, category and keyword&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrich&lt;/strong&gt; them with emails (email finder)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify&lt;/strong&gt; deliverability before you send anything (anti-bounce check)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain&lt;/strong&gt; scraping, enrichment and validation end-to-end with no-code pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; clean CSV files in seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;FastAPI + SQLite on the backend, Alpine.js on the frontend, self-hosted (no paid third-party SaaS dependency in the core pipeline).&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;p&gt;Sales teams, agencies and founders who prospect at scale and are tired of paying for (and wiring up) four different subscriptions to do one job.&lt;/p&gt;

&lt;p&gt;It's free during the alpha, no credit card required: &lt;a href="https://outsend.xyz" rel="noopener noreferrer"&gt;https://outsend.xyz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer any questions about the scraping/enrichment pipeline in the comments.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>saas</category>
      <category>productivity</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
