Blog · October 2026

WordPress booking emails not arriving? Here’s how to fix them

A client books a call and never gets the confirmation. Or you never hear about the booking. It’s almost never the booking plugin. It’s how WordPress sends email, and it takes about twenty minutes to fix.

Every booking plugin depends on email: the confirmation to your client, the notice to you, the reminder before the meeting. When those emails go missing, people miss meetings and the booking page looks broken, even though the booking itself was saved.

The good news: the cause is usually the same, and so is the fix. This guide uses Bookira for the examples, but every step applies to any WordPress plugin that sends email.

Why WordPress email goes missing

By default, WordPress sends email with PHP’s built-in mail function on your web server. That mail usually has no proof that it really comes from your domain. It often goes out as wordpress@yourdomain.com, from a server that is not listed as allowed to send for your domain.

Gmail, Outlook and Yahoo treat that kind of mail as suspicious. Some of it lands in spam, some is silently dropped, and some hosts block the mail function completely. Gmail and Yahoo have also required sender authentication since 2024, so mail that used to get through may no longer arrive.

Step 1: Find out where the emails actually go

Before you change anything, check the obvious:

If the test email is in spam, or missing, go on to step 2.

Step 2: Send email through SMTP

The fix that solves most cases: stop using the server’s mail function and send through a real mail service instead. An SMTP plugin does this for every plugin on your site at once, so you set it up one time.

Free, well-maintained options on WordPress.org include WP Mail SMTP, FluentSMTP and Post SMTP. Any of them works. Then connect it to one of these:

Every SMTP plugin has a Send test email screen. Use it, and don’t continue until the test arrives in your inbox (not spam).

Step 3: Add SPF and DKIM to your domain

SPF and DKIM are two DNS records that tell receiving mail servers “this service is allowed to send email for my domain”. Without them, even SMTP mail can land in spam.

  1. Your email service (or your host) shows the exact records to add, usually under Domains, Senders or Authentication.
  2. Add them where your domain’s DNS is managed: your registrar, your host’s cPanel (Zone Editor) or a service like Cloudflare.
  3. Wait for the service to show the domain as verified. That can take from a few minutes to a few hours.

A DMARC record is the third piece. A simple one that only monitors, like v=DMARC1; p=none;, is a safe start.

One domain should have only one SPF record. If you already have one, add the new service to it instead of creating a second.

Step 4: Use a From address on your own domain

Emails should come from an address on the domain you just authenticated, not from a Gmail address and not from wordpress@. Your clients also see this name and address, so make it recognisable.

In Bookira, set it under Bookira → Settings → General → Sender. Leave the fields empty to keep the WordPress default, or set your own From name and From email. The address must be one your SMTP setup is allowed to send from.

Bookira Settings, General tab: Sender section with From name and From email, and the Reminder section with Send reminder set to 1 hour before
Sender and reminder settings in Bookira. The From email should match your SMTP setup.

Step 5: Make reminders arrive on time

Reminders are different from confirmations. A confirmation is sent the moment something happens. A reminder has to be sent at a set time, and WordPress does that with WP-Cron.

The catch: WP-Cron only runs when someone visits your site. On a quiet site with no visitors at night, a reminder for a 9:00 meeting can go out hours late, or after the meeting. Bookira checks for due reminders every 5 minutes, but only when WP-Cron actually runs.

The fix is a real cron job that calls WP-Cron on a schedule:

  1. In cPanel, open Cron Jobs (other hosts call it Scheduled tasks) and add a job that runs every 5 minutes:
    */5 * * * * wget -q -O - "https://yourdomain.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
  2. Optionally, add this line to wp-config.php so visitors no longer trigger WP-Cron and only your cron job does:
    define( 'DISABLE_WP_CRON', true );
    Only do this once the cron job works, or scheduled tasks stop on your site.

To check that it runs, the free WP Crontrol plugin lists all scheduled events. Bookira’s is called bookira_send_reminders and should show a next run within the next few minutes.

Many managed WordPress hosts already run WP-Cron for you. Check your host’s documentation before adding a second job.

Quick checklist

ProblemMost likely fix
You never get booking noticesCheck the Administration Email Address, then set up SMTP
Clients find the email in spamSMTP, plus SPF and DKIM on your domain
No emails at allYour host blocks PHP mail. Set up SMTP
SMTP test failsWrong password, port or From address not allowed by the service
Reminders arrive late or neverA real cron job for wp-cron.php

Set it up once, then forget it

Twenty minutes with SMTP, two DNS records and a cron job fixes email for your whole site, not just bookings: contact forms, password resets and shop orders all benefit too.

New to Bookira? Start with the step-by-step setup guide. It covers meeting types, availability and the booking page, and the email setup above is the last piece.

Get Bookira free on WordPress.org

← All articles