If you run a newsletter, you’ve probably noticed signups appearing in your subscriber list with email addresses that look subtly wrong. Names you don’t recognise. Local-parts with strange dot patterns like k.en.d.ra.lr@gmail.com. All marked as “direct” with no referer, no UTM, no obvious traffic source.
These aren’t your audience. Your site is being used as a relay in an attack on someone else’s inbox. The technical name is subscription bombing (also called list bombing or mail bombing), and once you know what to look for, you’ll see it on almost every newsletter signup form on the open web.
What subscription bombing actually is
An attacker picks a victim — usually one specific email address. They run a bot that visits thousands of unrelated websites that accept newsletter signups and submits the victim’s email to every one of them.
Within ten minutes, the victim’s inbox fills with two hundred legitimate-looking welcome emails from newsletters they never signed up for. Travel sites, ecommerce stores, hobby blogs, university mailing lists, charity newsletters. Each individual email is innocuous. The pile is the point.
Your site isn’t being attacked. Your site is being used as a small, expendable cog in an attack on someone you’ve never met.
Why attackers do this
The motive is almost always to hide a single critical email from the victim:
- Credit card fraud cover. The attacker just made a $2,000 purchase on the victim’s stolen card. The bank will send a fraud-alert email within minutes. If that alert is buried under 300 newsletter confirmations, the victim might not see it until after the cancellation window closes.
- Account recovery. The attacker is trying to take over the victim’s email or banking account. Password-reset confirmations and 2FA codes get buried in the same way.
- Harassment. Less common, but bombings are sometimes used to make a target’s inbox unusable for days.
There are services that openly sell this. “1,000-site mail bomb, $30.” They use rented botnets so the requests come from thousands of residential IPs — no single source to block.
How to spot it on your own list
Two patterns are diagnostic:
The dotted-Gmail trick
Gmail ignores dots in the local-part of an address. kendralr@gmail.com, k.endralr@gmail.com, and k.en.d.ra.lr@gmail.com all deliver to the same inbox. Each site’s database stores them as distinct addresses (so per-site dedup doesn’t catch the second signup), but the victim receives every email.
If you see several Gmail signups in the same short window with unusual dot patterns, those are almost certainly bot signups. Real humans don’t sprinkle random dots through their own email when filling out a form.
Missing referer, missing UTM, sub-minute conversion
Bots that target your endpoint directly never load the form page first. They POST straight to the subscribe endpoint with just {email}. As a result:
- No
Refererheader. - No
utm_sourceon the landing URL. - No first-touch attribution cookie.
- “First seen” and “subscribed” timestamps within seconds of each other.
A real visitor might land via Facebook, browse for a few minutes, then sign up. Their attribution captures something. Bots leave nothing.
Layered defences that actually work
No single check stops subscription bombing. The pattern is layered defences, each catching a slightly different bot class:
- Honeypot field. A hidden input field that real humans never see. Bots that scrape the form HTML and fill every input get caught. Cheap, transparent, zero UX impact. Useless against bots that POST straight to the endpoint without loading the form.
- Per-IP rate limit. N submissions per IP per hour. Catches bursty single-IP attacks. Useless against distributed botnets across thousands of residential IPs.
- MX-record check. Reject signups whose email domain has no MX (mail exchanger) record. Catches typos and made-up domains. Cheap — one DNS lookup. Useless against Gmail-based attacks.
- Disposable-domain blocklist. Reject signups from known throwaway services (mailinator, guerrillamail, yopmail, etc.). Useless against real-domain attacks but kills another bot class.
- Gmail dot-normalization. Strip dots from the local-part of Gmail addresses before storing. If
kendralr@gmail.comalready exists, the second variant gets rejected as a duplicate. Catches dot-trick attacks on a single site (though not across multiple sites). - Cloudflare Turnstile. Invisible CAPTCHA. By far the most effective single layer — it makes bot signups dramatically more expensive to attempt. Some UX cost: real users with strict privacy extensions occasionally fail it.
- Double opt-in. Send a confirmation email; only add the subscriber once they click. The standard ESP defence. It doesn’t prevent the bomb (you still send one email) but it stops the victim from being added to your ongoing list, which protects your sender reputation downstream.
Each layer should silently accept-and-drop suspicious signups — return HTTP 200, never reveal which check tripped. If your endpoint says “rate limited” or “honeypot detected,” attackers immediately adapt.
What One Two Three Send does out of the box
As of version 2.0.20, the free plugin’s /wp-json/otts/v1/subscribe endpoint runs four layers automatically:
- Honeypot on the form (hidden
websiteinput — already in earlier versions). - Per-IP rate limit — 10 submissions per IP per hour by default, filterable via
otts_subscribe_rate_limit_per_hour. - MX-record validation on the email domain.
- Disposable-domain blocklist of ~30 common throwaway services, filterable via
otts_subscribe_disposable_domains.
All four layers silently accept-and-drop — bots can’t fingerprint which check rejected them.
The Subscribers admin page now has a Delete button on every row for cleaning up signups that slip through. Two new admin-only REST endpoints (DELETE /wp-json/otts/v1/subscriber/{id} and POST /wp-json/otts/v1/subscriber/delete-by-email) let you script bulk cleanups if you need to delete dozens of bot signups at once.
If your site is being bombed heavily, Cloudflare Turnstile in front of your signup form is the next step. It’s free, integrates in a few lines of JS, and stops the overwhelming majority of attacks that get past the layers above. Double opt-in is the layer after that.
One thing worth keeping in mind
If you see fifty bot signups appear in your list, your first reaction will probably be annoyance about list-hygiene. The bigger picture is that fifty real people — strangers, somewhere — just had their inboxes flooded as cover for a fraud or account-recovery attack. Tightening up your form isn’t just protecting your sender reputation. It’s removing one of the small relays that subscription-bombing services rent out by the thousand.
Every site that adds a honeypot, a rate limit, or a Turnstile widget makes that business model a little less profitable. That’s worth doing.

