When a donor writes "I never got a receipt," work through the five checks below in order. Each one rules out a cause, and the early ones take a minute or two. The mailbox providers' rules quoted here are from their own pages, read in November 2026. They change them, so check the linked page before you act.
Was the gift actually recorded as completed?
Check this first, because no email setting matters if the site never sent a receipt. Donor Merchant sends the donation receipt at the moment the payment is confirmed and the gift becomes Completed, and not before. Open Donor Merchant → Donations and find the gift. The donor's email address is shown under their name.
| What you see | What it means |
|---|---|
| Completed | The site sent the receipt to the address shown, unless the gift was imported, added by hand without "Email a receipt to the donor" ticked, or set to Completed with the Mark completed row action. Go to the next check. If the address has a typo, that's your answer. |
| Pending, or no gift at all, while Stripe or PayPal shows it paid | The payment was never confirmed back to your site, which is a webhook problem, not an email problem. Follow Stripe says the donation succeeded but WordPress never recorded it. |
| Processing | A bank (ACH) payment that is still clearing. The receipt goes when it clears, usually a few business days later. |
| Awaiting payment | A check or bank transfer the donor promised. The receipt goes when you click Mark received with "Email the donor a receipt" ticked. |
Two things to know. If a stuck gift is later completed by Stripe's or PayPal's notification to your site (for example after you fix the webhook and resend the event), the receipt goes out then. Try that first: once a gift is already Completed, a resent notification sends nothing. If you fix the record yourself with the Mark completed row action, nothing is emailed. Status corrections never email donors. Also look at Settings → Email: the list shows whether Donation receipt is enabled.
Can your site send any email at all?
Find out with a test email. Open Donor Merchant → Settings → Email, type an address you can check, and click Send a test email. It uses sample donor details and your unsaved changes, and the subject starts with "[Test]". Send one to a Gmail address and one to an Outlook or Yahoo address if you have them, because each provider filters differently.
Read the result carefully. "The test email could not be sent. Check your site's email setup." means your server refused to send it. "Test email sent to..." only means the site handed the message over. WordPress's own code says "A true return value does not automatically mean that the user received the email successfully." If the test never arrives, or lands in spam, keep going.
Here is why this fails so often. WordPress sends mail through a function called wp_mail(), and out of the box that uses PHP's mail() on your web server. The server sends it directly, with no email account behind it. Hosts can restrict this. WP Engine, for example, says "we impose a hard limit on the amount of emails that can be sent in an hour," says its infrastructure providers "do not allow mail to be sent over port 25," and "recommends using 3rd party email hosts." Your host's help pages will say what applies to you.
The fix is to send through a real email service instead. An SMTP plugin does that: it routes everything WordPress sends through an account you control. Free options on WordPress.org include WP Mail SMTP, FluentSMTP and Post SMTP. You connect it to either your organization's email provider (the one that hosts your staff mailboxes) or a transactional email service, which is a company that sends automated mail like receipts for you. Any of them is fine. Pick the one your host or email provider documents.
wp_mail(), so once an SMTP plugin is working, receipts use it with no extra setup. The plugin doesn't include a mail service of its own. Some SMTP plugins keep a log of sent mail (Post SMTP's listing names email logs as a feature), which helps you prove whether a receipt left the site.Is your domain set up to prove the mail is yours?
If mail arrives but goes to spam, this is the usual cause. Three settings in your domain's DNS (the records your domain registrar or DNS host keeps) tell mailbox providers your mail is genuine:
- SPF is a list of the servers allowed to send mail for your domain. The standard describes it as letting a domain's owners "explicitly authorize the hosts that are allowed to use their domain names."
- DKIM is a digital signature on each message, checked against a key published in your DNS. It shows your domain takes responsibility for the message.
- DMARC ties the two to the address donors see in "From" and tells providers what to do with mail that fails:
none(just watch),quarantine(treat as suspicious) orreject. It is defined in RFC 9989 (May 2026).
Your email service gives you the exact records to add. One trap: a domain may have only one SPF record (RFC 7208, section 3.2). If you already have one for your staff mail, add the new service to it instead of creating a second.
What do Gmail, Yahoo and Outlook actually require?
The strict rules are for high-volume senders, but every sender has a baseline, and a small nonprofit benefits from meeting the strict ones anyway.
| Provider | Every sender | High-volume senders |
|---|---|---|
| Gmail | SPF or DKIM; spam complaints below 0.3%; "Don't impersonate Gmail From: headers" | About 5,000 or more messages a day to personal Gmail: SPF and DKIM, DMARC (p=none is fine), From domain aligned |
| Yahoo | "SPF or DKIM at a minimum"; spam rate below 0.3% | Bulk senders (Yahoo publishes no number): SPF and DKIM, DMARC at least p=none that passes, From domain aligned |
| Outlook.com | No separate list; Microsoft says "all senders benefit from these best practices" | More than 5,000 a day: SPF and DKIM pass, DMARC at least p=none. Failing mail went to Junk from May 2025; Microsoft's support page now describes it being rejected with error 550 5.7.515 |
Your receipts alone are unlikely to reach 5,000 a day. But Google says "Messages sent from the same primary domain count toward the 5,000 limit," so a newsletter sent from the same domain counts too, and anyone who crosses it once is "permanently considered" a bulk sender. Yahoo says it "strongly urges all senders to publish a DMARC policy." Setting up all three costs nothing.
To check a received message, open it in the Gmail app and tap "View details", then "View security details". "Mailed by" and "Signed by" show the domains that passed SPF and DKIM. Google says a question mark next to the sender's name means the message isn't authenticated.
Is the From address on your organization's own domain?
It needs to be. DMARC checks that the domain in the From address matches a domain that passed SPF or DKIM. RFC 9989 calls this alignment, and by default it allows a subdomain of the same domain to count. Your web server is not authorized to send mail for gmail.com or yahoo.com, so a receipt "from" [email protected] fails that check however well the rest is set up.
For some providers it's worse than spam. Yahoo and AOL publish a DMARC policy of p=reject for their own domains (DNS records read 6 November 2026), which asks receiving servers to refuse mail claiming to come from them that they didn't send. gmail.com currently publishes p=none, but Google's rule above still applies.
In Donor Merchant, open Settings → Email → Sender. Set the "From" name (your organization's name), and a "From" address on your domain, such as [email protected]. If you leave the address blank, the plugin uses the email address from Settings → General, and if that's blank too, the WordPress admin email. If replies should reach a personal inbox, put that in "Reply-to". DMARC only checks the From address, so the reply-to can be any address. If your SMTP plugin has its own From setting, make it match.
Where did the donor's copy go?
If your tests arrive in the inbox and the donor's gift shows Completed, the receipt most likely reached them and was filed away. Ask them to search their whole mailbox for your organization's name, including Spam. In Gmail, Spam is under More → Spam, and the "Not spam" button moves a message back. Gmail may also sort receipts into the Promotions or Updates tab. Google says dragging a message to the right tab "helps Gmail learn your preferences."
For one-time Stripe gifts there is often a second copy. Donor Merchant gives Stripe the donor's email, and Stripe says it then "sends a receipt to that address when the payment succeeds in live mode." That one comes from Stripe, so ask the donor to search for it too.
How do you get the donor their receipt now?
Donor Merchant has no "resend receipt" button. The receipt email goes once, when the gift completes. These are the routes that exist:
- The donor portal. If you have a portal page (Settings → General can create it for you), the donor enters their email, clicks Email me a link, and sees their completed gifts, each with a View / print link to its printable receipt, plus annual statements. The sign-in link is sent by your site too, so fix sending first. See the donor portal.
- Offline gifts not yet marked received. Use Mark received and leave "Email the donor a receipt" ticked.
- Stripe's own receipt. In the Stripe Dashboard, open Transactions → Payments, click the payment, then under Receipt history choose the ⋯ menu and Send receipt. This is Stripe's payment receipt, not your donation receipt, so it won't carry your receipt wording or statement text.
- Write to the donor yourself. From your organization's mailbox, send the amount, date and transaction ID shown in the Donations list, plus whatever your normal receipt says, and tell them about the portal for next time.
If you'd rather someone walk through these checks with you on your own site, that is what our support plans are for. The plugin and every feature stay free either way.
Sources
- WordPress core, wp_mail() in pluggable.php (read November 2026)
- WP Engine: Sending email on WP Engine (read November 2026)
- RFC 7208: Sender Policy Framework (SPF)
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 9989: DMARC (May 2026; obsoletes RFC 7489 and RFC 9091)
- Google: Email sender guidelines (read November 2026)
- Google: Email sender guidelines FAQ (read November 2026)
- Yahoo Sender Hub: Sender requirements and recommendations (read November 2026)
- Microsoft: Outlook's new requirements for high-volume senders (updated April 2025, read November 2026)
- Microsoft Support: Fix NDR error 550 5.7.515 in Outlook.com (read November 2026)
- Gmail Help: Check if a message is authenticated (read November 2026)
- Gmail Help: Mark or unmark spam (read November 2026)
- Gmail Help: Inbox categories (read November 2026)
- Stripe: Receipts and paid invoices (read November 2026)