Behind the complaint that a WordPress contact form is not sending email, the problem is often the route the email takes out of the website rather than the form itself. Form plugins hand notifications to WordPress’s wp_mail() function; by default, this function uses the hosting server’s PHP mail infrastructure. If the server restricts sending, the “From” address does not match the domain, or the domain lacks SPF and DKIM records, the message either never leaves or remains in the recipient’s spam folder. This is the common factor behind searches such as Elementor form email not arriving or Contact Form 7 not sending email.

This article explains the causes in sequence, then covers diagnostic steps, sending through SMTP, storing submissions in the database, and a testing checklist. Because WooCommerce order emails use the same infrastructure, they are also covered in a short section. Onur Freelance is not an official support channel for WordPress or form plugins; the information here is based on documentation published by plugin developers and situations frequently encountered in practice.

If form notifications are not arriving, let us diagnose the problem together

A few checks distinguish whether a notification is lost in the form, on the server, or at the recipient’s end. The free preliminary assessment examines form settings, the sender address, and the domain’s DNS records; the scope of any work is clarified in the initial consultation.

WordPress contact form not sending email: Where is the problem usually located?

The problem generally concerns how email is sent rather than the form: even if the form displays a successful submission message, the email may never have left the server or may have been rejected by the receiving server. The “Your message was sent” notice shown to the visitor only indicates that the form received the data. Whether the message reaches the inbox is a separate stage.

The most common causes encountered in practice fall into four groups:

  • Server-based sending: WordPress sends email through the hosting server’s PHP mail function by default; this function may be disabled or restricted.
  • A mismatched “From” address: A sender address outside the website’s domain makes the message look like a spoofed email.
  • Missing authentication: Without SPF and DKIM records on the domain, the receiving server cannot verify the source of the message.
  • Incorrect recipient settings: Form notifications are sent to an old, mistyped, or no longer used address.

These problems often occur together rather than individually. A lasting solution therefore involves reorganizing the sending route from the start instead of changing a single plugin.

What is wp_mail(), and why does it depend on the hosting server?

wp_mail() is the core function used by WordPress and form plugins to send email, and it is not a mail server in its own right. The function prepares the message using the PHPMailer library bundled with WordPress; unless SMTP is configured separately, it hands the message to the server’s PHP mail infrastructure. Elementor’s help page about forms not sending email also states that Elementor forms use the wp_mail function and that the web server processes and sends the outgoing message.

WordPress’s wp_mail() reference page emphasizes an important point: the function returning “true” does not mean the user successfully received the email; it only indicates that the method used processed the request without error. This is what happens behind the scenes when a form plugin says “sent.” The message’s subsequent journey depends on the server, DNS records, and the recipient’s filters.

Why do hosting companies restrict sending?

Because PHP mail on shared servers is open to abuse, some hosting companies disable it or impose hourly sending limits. The same Elementor help page states that servers may disable the PHP function that sends email to prevent spam abuse. Spam sent by another site sharing the server can also lower the server IP’s reputation and affect messages from legitimate sites.

Page contents

WordPress iletişim formu mail gitmiyor: formdan çıkan kağıt uçak e-posta, kalkan ve posta sunucusuna giden SMTP bağlantısı illüstrasyonu

What happens if the “From” address does not match the domain?

If the “From” address does not belong to the website’s domain, the receiving server may treat the message as spoofed and send it to spam or reject it. Contact Form 7’s Best practices for email setup page states this explicitly: the “From” field must use an address belonging to the site’s domain. For example, if the site is on ornekfirma.com, the sender address should be something like bilgi@ornekfirma.com; a Gmail or Hotmail address is not entered in this field.

Another common mistake is putting the email address entered by the visitor into the “From” field. WPForms notification documentation states that this practice can raise phishing suspicions and harm the domain’s reputation. The correct method is to put the visitor’s address in “Reply-To”; clicking “Reply” on the incoming notification then sends the response directly to the visitor.

Contact Form 7 documentation highlights another detail: the plugin’s default template uses a wordpress@alanadi-style address in “From,” and some hosts may block sending if that address does not actually exist. Creating this address as a real mailbox with the hosting provider or replacing “From” with an existing business address is recommended.

Can missing SPF and DKIM cause form notifications to land in spam?

Yes; if the domain lacks SPF and DKIM records or those records do not cover the sending server, form notifications may land in spam or not be delivered at all. SPF lists which servers may send email on behalf of the domain; DKIM adds a digital signature associated with the domain to the message. Even if “From” is correct, missing records prevent the receiving server from verifying that the message actually came from that domain.

A frequent trap in form notifications is that business email is with one provider, the website is on another server, and SPF covers only the email provider. In this case, messages leaving the site through PHP mail cannot pass SPF checks. How to set up SPF, DKIM, and DMARC and test them with Gmail’s “Show original” in the guide to email going to spam is explained with example records.

How do you diagnose missing form notifications?

Diagnosis begins by distinguishing whether the problem is in the form, on the server, or at the recipient’s end, and can be performed through a few simple checks. Following the sequence below instead of randomly changing plugins generally reveals the broken link quickly:

  1. Spam and junk folders: Check spam, junk, and other tabs in the intended recipient mailbox; if the message is there, the issue concerns authentication rather than sending.
  2. Recipient address: Open “To” in the form notification settings; confirm that the address is spelled correctly and is still used.
  3. Test a different mailbox: Temporarily direct notifications to an address with another provider and submit the form; if the message arrives there, the problem is the receiving server’s filter.
  4. WordPress test email: Most SMTP and email logging plugins allow a test message from the panel; bypass the form to see whether the server sends email.
  5. Email log: An email logging plugin records which message the site sent, when, to whom, and whether it encountered an error.

If the message never appears in the log, the problem lies within the form or a plugin conflict. If it appears as “sent” but does not reach the recipient, the problem is on the server, DNS, or recipient side. An error recorded in the log often indicates that the server rejected the send request.

Settings to check in Elementor, Contact Form 7, WPForms, and WooCommerce

Each form plugin places notification settings on a different screen, but the fields to check are the same: recipient, “From,” “Reply-To,” and whether submissions are recorded. Because plugin interfaces can change between versions, the following describes fields to check rather than menu paths.

Elementor form email not arriving

In an Elementor Pro form, the email action is defined among the form’s actions after submission; the recipient, subject, “From,” and “Reply-To” are set there. Elementor’s help page recommends that the form’s “From” address use the website’s domain and that the visitor’s email field be selected as the reply address. The same page recommends using Elementor’s Submissions feature to check whether the form works and trying another recipient address because the original may have been flagged as spam.

Contact Form 7 not sending email

In Contact Form 7, notifications are managed in the Mail section of the form editing screen; Mail (2) is used if a second message will be sent to the visitor. According to the plugin documentation, “Reply-To” is entered under Additional headers in these sections. The documentation also recommends care with values from optional fields and avoiding an empty or very short message body; otherwise, sending may fail on some hosts.

WPForms notifications

According to WPForms documentation, notifications are enabled by default and the default recipient is the site’s administrator email address. If that address belongs to someone who installed the site years ago, notifications may be going to that person. When “From” does not match the website’s domain, the plugin displays a warning below the field; this warning should not be ignored.

WooCommerce order emails

WooCommerce order emails also leave through the same wp_mail() infrastructure; order confirmations are therefore likely to be affected in a store whose form notifications fail. According to WooCommerce email troubleshooting documentation, every transactional email attempt is logged; sent and failed order-email attempts are also added as order-specific notes. The sender address in WooCommerce settings is also recommended to belong to the site’s domain.

Even test messages are not leaving? Let us establish the sending route together

If the test email does not arrive either, the problem is most likely on the server or DNS side. Configure the SMTP connection, “From” address, and SPF/DKIM records together, then test each form individually. The scope of work is clarified after a free preliminary assessment.

WordPress SMTP setup: PHP mail, a business account, or a transactional service?

For a WordPress contact form not sending email, the lasting solution is to send notifications through an authenticated SMTP connection instead of the server’s PHP mail function. WordPress SMTP setup usually uses an SMTP plugin; the plugin routes wp_mail() calls to the selected mail server. Elementor’s help page also recommends this approach and mentions WP Mail SMTP and services such as SendGrid as examples; the products named here are examples only.

There are two common SMTP options. The first is a business email account on the domain: for example, Google Workspace’s Send email from apps and devices page specifies smtp.gmail.com, port 465 or 587, a full email address and an app password, and a daily limit of 2,000 messages for the Gmail SMTP server. The second is transactional email services; these are designed for automated messages such as order confirmations, password resets, and form notifications, and generally provide their own sending logs.

CriterionThe server’s PHP mail functionSMTP through a business accountTransactional email service
SetupNo configuration requiredSMTP plugin + account credentialsService account + DNS verification
AuthenticationWeak if the server is not in SPFStrong with the provider’s SPF/DKIMStrong with the service’s SPF/DKIM
Sending trackingUsually unavailableLimited Sent folderUsually a detailed log
Suitable useTemporary, testing purposesLow-volume form notificationsStores and high-volume websites

Whichever route is selected, the “From” address in the SMTP plugin must be compatible with the SMTP account; WPForms documentation also states that most SMTP services require this match. If no business address exists on the domain yet, how to create one in the How to get business email article is explained.

Why is storing form submissions in the database necessary?

However well email is configured, separately storing form submissions in the database is the closest precaution to eliminating the risk of loss. Contact Form 7’s Flamingo documentation states that the plugin does not store submitted messages anywhere; important messages can be permanently lost if the mail server has a problem or a setting is incorrect. The free Flamingo plugin from the same developer records these messages in the database.

To avoid losing inquiries because a WordPress contact form is not sending email, Elementor Pro’s Submissions feature can be used; it makes data viewable in the WordPress panel and downloadable as CSV. Because submission recording in other form plugins such as WPForms can vary by version and plan, check separately whether the feature is enabled in the version used. Because records contain personal data, also remember to restrict access to authorized users and regularly remove unnecessary old records.

Common mistakes and the correct method

The most common mistake with form notifications is treating the symptom while leaving the cause; changing the form plugin, for example, does not change the sending route. Common mistakes encountered in practice and their correct alternatives are as follows:

  • Entering a Gmail address in From: Set the sender address to a business address belonging to the website’s domain.
  • Making the visitor’s address the sender: Put the visitor’s address in “Reply-To.”
  • Installing multiple SMTP plugins: Keep only one sending plugin active at a time; conflicts complicate diagnosis.
  • Not adding the new sender to SPF: Update SPF when the SMTP service changes; the domain should have a single SPF record.
  • Leaving a password exposed in plugin settings: Use an app password or service API key where possible, and retain access only for the necessary person.
  • Not testing after updates: After a plugin, theme, or PHP update, submit each form once and check the notification.

The common feature of these mistakes is that the problem can remain unnoticed for weeks. Missing notifications are often discovered only when a customer calls and says “I submitted the form but never heard back.”

Form notification testing checklist

After configuration is complete, verify actual delivery through real form submissions and more than one recipient type. Complete this checklist before considering a WordPress contact form not sending email to be resolved:

  1. Submit every form on the site separately, including contact, quotation, appointment, and newsletter forms.
  2. Test notifications by sending to both a business mailbox and an address with a different provider.
  3. In the received message, check that “From” belongs to the domain and “Reply-To” points to the visitor.
  4. In Gmail’s “Show original,” verify that SPF and DKIM results show PASS.
  5. Confirm that sending is recorded without errors in the email log.
  6. Check in the panel that the submission is also stored in the database.
  7. If there is a store, test customer and administrator order emails using a test order.

Repeat this checklist after every major update as well as after initial setup. A brief monthly test prevents lost inquiries from being discovered months later.

When should you consult a specialist for a WordPress contact form not sending email?

Specialist support saves time if diagnostic steps do not identify the source, DNS records are inaccessible, or store order emails are affected. Where multiple providers send email on behalf of the same domain, merging SPF correctly requires care; an incorrect edit can affect business email itself. If the hosting company has disabled sending entirely, the solution requires an infrastructure decision rather than a plugin setting.

At Onur Freelance, these issues are handled within the annual WordPress maintenance and updates service: contact forms and any order emails are tested after updates, and the work performed is recorded. Maintenance costs 500–2,000 TL per month depending on the site’s size and scope; the scope is clarified in the initial consultation. If the site’s hosting will also be reorganized, the hosting prices page’s annual 2,000 TL package is opened in the business’s name. Onur Freelance is not an official support channel for WordPress, plugin developers, or email providers and does not promise that email will reach the inbox under all circumstances; the aim is to make the sending route verifiable and traceable.

Avoid lost inquiries: Let us keep forms under regular checks

If the problem was just discovered, the first step is to complete the diagnostic list and start storing submissions in the database. If notifications have begun arriving, a maintenance plan for regular testing and update monitoring can be discussed. If the reason the form has gone silent remains unclear, contact us through WhatsApp or by phone for a free preliminary assessment.

Frequently asked questions

First check spam and junk in the intended recipient mailbox, then the recipient address in the form settings. If the message is nowhere to be found, use an email logging plugin to see whether the website is sending it.

According to WordPress’s wp_mail() documentation, a successful return does not mean the recipient received the email. The form may have received the data while the message got stuck on the server, during DNS authentication, or in the recipient’s spam filter.

Elementor’s help page recommends using a From address on the website’s domain, sending through an SMTP plugin, and checking that the form works through Submissions. Notifications should also be tested with a different recipient address.

According to Contact Form 7 documentation, From must use an address belonging to the website’s domain. The visitor’s address belongs in the Reply-To line under Additional headers rather than From.

A business email account on the domain or a transactional email service can be used. A business account is often sufficient for low-volume form notifications; transactional services providing sending logs are more suitable for stores and high-volume websites.

They can, but the likelihood of landing in spam or being rejected increases. The receiving server cannot verify that the message really comes from the domain; record setup is explained in the guide to email going to spam.

WooCommerce logs every transactional email attempt and adds sent or failed order-email attempts as order notes. This record shows whether the email left the site; if it did, examine SMTP and SPF/DKIM.

The scope of a one-time intervention is clarified in a free preliminary assessment. At Onur Freelance, regular WordPress maintenance costs 500–2,000 TL per month depending on the site’s scope and includes form tests after updates. Onur Freelance is not an official WordPress support channel.