"Email did not arrive" There are three different problems: WordPress didn't create the message at all, the service didn't accept sending it, or the message was accepted but was stopped on the way to delivery by Spam or the recipient's policy. Immediately installing an SMTP plugin without detecting the broken step may just move the token.
Quick answer: Send a test message with a controlled receiver, record whether wp_mail() is called, see the response from the sending service and the message ID, and then check the delivery status in the provider. Fake from, incomplete DNS and hosting restrictions are common causes.
Determine the domain of the problem
- Does the reset password not arrive or only a specific form?
- Are all recipients having problems or just one domain?
- Is the email in spam or no trace in the log? No?
- Error after migration, DNS change or plugin update started?
- Is the queue or cron responsible for sending delayed?
If only the specific form has a problem, check the notification and conditions of the same form. If all emails are down, transport, credential, and network are more likely.
Check message creation
Form plugin or WooCommerce may not call submission at all due to validation, order status or conditional template. See the program log and related hooks. The success of the send function also does not guarantee the delivery of the Inbox; It only shows the acceptance of the message at the current stage.
PHP mail problem or limitation
Some hosts limit the mail function or handle its output without usable logs. Check the sending rate, local queue, hostname and mail service log. It is not recommended to turn off the firewall or security for a temporary solution; The required destination and port must be strictly allowed.
From must be valid
Using the form user's address as From can be inconsistent with SPF/DMARC. Usually, From should be from the domain that the service is allowed to send to, and the user's address should be included in Reply-To. Header injection and raw user input should also be controlled.
Difference between sending and delivery
If the provider accepts the message, check the message ID and delivered, bounced, deferred or rejected events. Spam folder is only one of the destinations. Full mailbox, organizational policy, reputation and domain authentication can stop delivery. A "successful delivery" claim is not accurate without a delivery log.
What role do SPF, DKIM, and DMARC play?
SPF defines the domain's authorized senders, DKIM signs the message, and DMARC defines policy and alignment. Create records from actual provider documentation; Multiple separate SPF or dummy DKIM keys are not correct. DNS changes have propagation time and must be checked from independent resolvers.
Step-by-step resolution process
- Choose a specific receiver and test message.
- Log WordPress and transport with timestamp.
- Check credential, From and TLS without revealing secret.
- Follow message ID in provider to final event.
- Validate domain DNS.
- After modification, reset password, measure form and test order separately.
Common mistakes
- Place SMTP password in screenshot or repository.
- Disabling TLS certificate verification.
- Using personal Gmail for uncertain traffic volume.
- Test only one type of email and draw conclusions for everyone Routes.
- Adding multiple SMTP plugins at the same time.
Queue, Cron and Scheduled Emails
Some plugins do not send in the same request and leave the message to wp-cron, Action Scheduler or queue. In this case, a healthy SMTP connection is not enough. Check the number of pending/failed jobs, the time of the last worker execution and the error of each job. Blindly running all backlogged jobs may suddenly send thousands of old emails; First, specify the scope and business effect of the queue.
How to separate timeout and TLS error?
timeout is usually related to DNS, egress firewall, port or provider not responding; Authentication error refers to account credential or policy, and certificate error refers to hostname, CA or system time. Keep the exact text of the exception. Accidentally changing the port, turning off TLS, or increasing the timeout too much hides the cause.
Prevention and Observability
Monitor failure and bounce rates, queue length, and last successful delivery for critical messages. A limited synthetic test can show a complete outage early, but it shouldn't ruin the mailbox or domain reputation by sending too much. Credentials should rotate periodically and DNS changes should be documented.
When is expert help needed?
If a message is created but the delivery event is ambiguous, or the transmission is lost between cron, WooCommerce, and the provider, Troubleshooting a WordPress technical issue can route followed by log and message ID. To choose the right transport, see also the WordPress SMTP Guide.
Frequently Asked Questions
Does receiving a test email mean everything is OK?
No. Form, order and cron path may be different; Test each important flow separately.
Why does the email reach Gmail but not the organization?
The policy, DNS, reputation or quarantine of the organizational recipient can be different. Delivery event and receiver log are required.
Does SMTP always solve the problem?
No. If the message is not created or the template is conditional, changing the transport has no effect.