Go Back to Parent Doc

Email Notifications

Every valid submission sends one notification email. Configure it per form in the Notifications panel on the Form block, or once for every form under Forming → Settings → General.

Settings

Recipient email(s): one address, or several separated by commas. Invalid addresses are dropped silently. If none are left, the form uses the Default recipient(s) from Settings, and if those are empty too, your site’s admin email. A form never mails nowhere.

Email subject: free text. Left empty, it becomes New form submission on {your site name}.

From name and From email: the identity the message is sent under. Left empty, the defaults from Settings are used, then whatever your site or SMTP plugin uses.

Defaults for every form

Under Forming → Settings → General, set Default recipient(s), From name, From email and a Default success message. Any form that leaves these blank in its block settings uses the defaults, so you can change where every form’s mail goes in one place.

What the email contains

A plain-text body, one line per field, in the order the fields appear in the form:

Name: Ada Lovelace
Email: ada@example.com
Message: Do you take on custom work?
Subscribe: Yes

Submitted from: https://example.com/contact/

Details worth knowing:

  • Choice fields show the option label, not the stored value, and multiple choices are separated by commas.
  • A single consent checkbox shows Yes.
  • An “Other (please specify)” answer shows the visitor’s own text.
  • Hidden fields are left out of the body, since they’re metadata, but they’re saved with the entry.
  • Pro fields show a readable value, such as the date range, the signature image link or each repeater row. Passwords and Confirm Email fields (Pro) are never included.
  • The last line links back to the page the form was submitted from.

Reply-To is handled for you

If the form has an Email field, the first valid address the visitor entered becomes the message’s Reply-To. Clicking Reply in your mail client answers the visitor.

That’s also why you should not put the visitor’s address in the From field. Mail that claims to come from @gmail.com when your server isn’t Gmail is exactly what SPF and DMARC block, and it’s the most common reason form notifications land in spam or vanish. Send from your own domain and reply through Reply-To.

Sending a test email

Go to Forming → Settings → Email, enter an address next to Send a test email to and click Send test email. The Forming → Dashboard setup checklist has the same button. If the test doesn’t arrive, the problem is your site’s mail delivery, not your forms.

Failed emails are logged

When wp_mail() reports a failure, Forming records it in Forming → Tools → Logs with the error message, the form and the recipients. The entry is still saved, so nothing is lost. Read it under Forming → Entries.

Delivery: wp_mail() and SMTP

Notifications go out through WordPress’s wp_mail(). That means:

  • Any SMTP plugin you already run (WP Mail SMTP, FluentSMTP, Post SMTP) handles delivery, with no extra settings in Forming.
  • A transactional service (SendGrid, Postmark, Mailgun, Amazon SES) works the same way, through its plugin.
  • On a host with no mail setup, PHP’s mail() is used, which is unreliable and often filtered.

If notifications aren’t arriving, set up SMTP first. It fixes most “the form doesn’t send” reports. The Dashboard checklist shows whether an SMTP plugin is detected.

Checking whether the submission itself worked

Mail delivery and form handling are separate problems. If Store submissions is on and the entry appears under Forming → Entries, the form worked and the issue is delivery.

Customizing the notification in code

The whole email (recipients, subject, body and headers) passes through a filter before it’s sent:

add_filter( 'forming_notification_email', function ( $email, $settings, $fields, $context ) {
	$email['subject']   = 'Website enquiry: ' . $email['subject'];
	$email['headers'][] = 'Bcc: archive@example.com';

	return $email;
}, 10, 4 );

To send an HTML email, add a Content-Type: text/html header and build $email['body'] as markup. For a second email, such as an autoresponder to the visitor, hook forming_submission_saved. Both are covered in the Developer Reference.

Shopping Cart
  • Your cart is empty.