Form Toolkit

Email and flow builder

Every submission can trigger two different emails:

  1. an internal notification (via mail route)
  2. a confirmation to the customer (via Flow Builder action)

Internal notification — mail routes

Mail routes live in the form editor under Email. A route describes a single delivery recipient.

Fields of a route

Field Meaning
Route name Internal label
Active Enable / disable the route
Mail template Optional; otherwise the default "Form Toolkit – New Submission" template is used
Recipient Primary recipient (required)
CC Optional, comma-separated (Premium)
BCC Optional, comma-separated (Premium)
Reply-To field Optional; form field of type email whose value is used as the Reply-To address
Conditions AND-combined filters, e.g. "send only when Dropdown = Service" (Premium)

Conditional routing (Premium)

In the Premium plan you can attach any number of routes to a form and assign conditions per route. Example:

  • Route 1: "Service" → support@, condition Dropdown = Service
  • Route 2: "Sales" → sales@, condition Dropdown = Sales
  • Route 3: "Other" → info@, no condition

Evaluation runs per submission — a matching route fires its mail, a non-matching one stays silent.

Reply-To to the customer address

To make sure replies to a notification mail land directly with the sender, you can pick a Reply-To field per mail route. The dropdown lists every form field of type email from the current form.

On submission the address entered by the customer is set as the Reply-To header — the From address stays the shop address. A click on "Reply" in the recipient's mail client is addressed to the customer directly.

This is intentional: sending with the customer's own domain as From would be flagged as spoofing by the recipient's SPF/DKIM/DMARC checks and most likely end up in spam. Reply-To is the accepted standard among major mail providers for contact and inquiry forms.

If the selected field does not carry a valid email address at submission, the mail is sent without a Reply-To header.

Customer confirmation mail

In the form's General tab toggle Send confirmation mail to customer.

Pick:

  • the mail template (type "Form Toolkit – Customer Confirmation") — Shopware imports it during plugin activation
  • the form field that carries the customer address (usually the email field)

Delivery runs as a Flow Builder action — reusable inside your own flows.

Flow Builder integration

When the plugin is activated a new event Form was submitted is registered in the Flow Builder. You can build your own flows on top of it — e.g.:

  • trigger a Slack notification
  • tag the customer
  • notify an external API

Bundled Flow Builder action

Action Effect
Send customer confirmation (PremsForm) Sends the configured confirmation mail to the customer address from the submission

The installer also creates a default flow that triggers this action on the "Form was submitted" event. You can disable that flow or add your own.

Multilingual mails

Mail templates are translatable like every other Shopware mail template. The submission's language is used to pick the matching translation — customers get the confirmation in their language.

Mail template variables

The mail templates expose, among others:

  • form — the form entity (name, fields, …)
  • entry — the submission (data, status, language, sales channel)
  • entry.data — list of every submitted field with label, value and fieldType
  • entry.getValueByIdentifier('...') — direct access to the value of a single field

Use them to build, for example, a full submission table inside the mail.

Direct access to a single field value

The helper entry.getValueByIdentifier('...') returns the value of one field without iterating entry.data. It expects the Technical name of the field as its argument.

You'll find the technical name in the form editor under Fields → selected element → Technical name. It is the identifier for the field's values in submissions and in mail templates.

The return value is the field value as a string — or null if the field was left empty or is not part of the submission.

Examples for the subject of a mail template:

New inquiry from {{ entry.getValueByIdentifier('firstName') ?? 'Guest' }} {{ entry.getValueByIdentifier('lastName') ?? '' }}
Inquiry about {{ entry.getValueByIdentifier('productName') ?? form.name }}

And inside the HTML body of a customer confirmation mail:

<p>Hello {{ entry.getValueByIdentifier('firstName') ?? 'there' }},</p><p>we have received your inquiry and will get back to you shortly.</p>