Ryan CobblerWP Mail SMTP

Sal's contact form worked. The emails never left the server.

Filed Time 4 min read Length 831 words

A row of rural mailboxes on posts along a roadside in Santa Fe, New Mexico

Joan left me a voicemail on a Tuesday. She runs the office end of Sal's plumbing shop, answers the phone, types the quotes. The message said the website contact form had gone quiet. "Nobody's come off that form in three weeks, Ryan. Did we break something?" Sal's shop lives on burst pipes and no-hot-water calls. Three weeks of web leads went quiet, and the only person who noticed was the lady who answers the phone.

Here's the thing I checked first: the form. The form was fine. You type your name, hit send, and the page says "Thanks, we'll call you." It kept saying that the whole three weeks. The email those forms generate never left my server. I had just moved Sal's site onto my own Hetzner box, and I had moved it straight into a mail block.

What actually broke

When I set up the nine sites on that box, Hetzner's docs told me plainly: they block outgoing mail ports 25 and 465 on cloud servers by default. Port 587 stays open. You can ask them to lift the block after your first month, once you're a paying customer with a paid invoice.

I read that line and thought, none of my sites send much mail. Famous last words. WordPress sends email for everything, contact forms and password resets and order notices. On Sal's old host, that mail just went out. On my new box, it piled up and died.

So the form worked and the mail didn't. It said thanks and delivered nothing, for three weeks, at a shop where the owner answers every call he gets.

The fix, and what it costs

Numbered, because it's the order I'd use next time, and next time I won't lose three weeks.

  1. Installed the free WP Mail SMTP plugin on Sal's site. Free on WordPress.org, built by the WPForms team. Four million plus sites run it, which isn't proof of anything, but it's not an abandoned project either.
  2. Signed up for Brevo's free tier, which sends 300 emails a day and asks for no card. A plumbing contact form sends a dozen emails a week. The tier costs nothing and won't hit its ceiling.
  3. Pointed the plugin at Brevo's server on port 587, the one port Hetzner leaves open. Connected the domain, sent a test, and it landed in my inbox in under a minute.
  4. Paid for Pro on Sal's site only, $49 the first year and $99 a year after that. The reason is the email log. Pro keeps a record of every email the site tries to send, delivered or failed, and it can alert me when one fails. Now the next quiet week announces itself.
  5. Left the other eight sites on the free plugin. Free plugin plus Brevo free does everything they need. Only the site where a silent failure costs a plumber real leads gets the log.

That's the honest version. Most sites on my box cost $0 in email. The one that pays is $49 the first year, $99 after, billed to me, squared up with Sal quarterly. The renewal jump is real, they're upfront about it on the pricing page, and I've written about intro prices before. Plan for the $99 or don't buy it.

The condensate line version

I spent twelve years finding clogged condensate drains. The air conditioner runs fine, cools the house fine, and the water it pulls out of the air has to go somewhere. When the line clogs, the machine keeps running and the water finds its own exit, usually onto the ceiling downstairs. You find out from a stain, weeks late, and by then it's drywall money. A contact form with no working mail is a clogged condensate line. The unit runs. The page says thanks. The water is going somewhere you haven't looked yet.

What will annoy you

The naming. Lite, Pro, Elite, Developer, Agency, and the marketing would have you believe the free one barely works. It works. Microsoft 365, Amazon SES, and Zoho Mail connections are Pro-only, which I didn't need. There's no trial of Pro either. The free plugin is the trial, which is fine once you know it. Their support answered my one ticket the same day, for what one ticket is worth.

Somebody will ask why I didn't just ask Hetzner to unblock the mail ports after the first month. Some people do. I didn't. Mail sent straight from a server's IP lands in spam folders more often than any of us would like, and a real mail service keeps its own reputation clean on purpose. I'd rather ride their rails.

What to do Monday

Open your own website and fill out your own contact form. Use a real email address you actually check, and wait five minutes. If nothing shows up, including the junk folder, your form has been a clogged line this whole time, and better to learn it on a Monday than from a voicemail three weeks from now.