Using the Send Email form handler to send email messages on form submission.
To send one or more emails on form submission, use the Send Email form handler. As a prerequisite, you also need to configure your Concrete CMS site to send email. If you anticipate any more than a trivial traffic volume, this should be an External SMTP Server. See Dashboard > System & Settings > Email > SMTP Method. If you are connecting to a GMail account, my friend Nour has posted a detailed guide for connecting a site to GMail.
To send email when a form is submitted, you can insert one or more Send Email form handlers into the submit pipeline. This handler provides a proforma for the email. You can build the boilerplate for an email using {{place_holders}} to be filled with system or entered form values. All fields in the Send Email handler configuration dialogue can process {{place_holders}}.
We also have an example you can test to send yourself an email from a form.
An optional condition can be used to control sending of an email.
The sender section allows configuration of From and Reply To email addresses. This is similar to configuring any email client. If left empty, both will default to your site configured email.default.address and email.default.name. Depending on your mail server configuration, the From address may be restricted to your domain or even to a single address.
The recipients section is a growing list. Every email needs at least one recipient and after that, you can add as many TO, CC or BCC addresses as you like. This is not designed for bulk email (see later). This is a form response, not a mailing list system.
In our example below we have
These varied settings are purely to illustrate the capabilities. A real form will be more sensible!
The message part of an email is similar to configuring any message with Form Reform. You can combine text and {{place_holders}} to customize a boilerplate email with fields from the form and other data values.
The main thing to remember is that any rich text (HTML) email must be self contained. It will not have the benefit of CSS classes provided by your web site theme. Hence anything beyond basic HTML tags will need some hand crafted style="" attributes.
With that in mind, we have a third option for how the body is formatted, so that any images within the body are base 64 encoded and embedded into the email.
HTML formatted emails can be sent with images.
With the HTML option, The images are not actually sent with the email, just a url to the image on your web server. With the HTML with embedded images option, images are base 64 encoded inline and become part of the actual message body.
Apart from how images are sent as a URL or embedded, everything else is the same. In its basic form, just use the image tool in the rich text editor to pick an image from the file manager and add the <img> tag into the message body.
To use an image uploaded with a form, we need to create an image tag containing a {{place:holder}} for the image URL or fid. The simplest way to do this is to add any image to create the <img> tag, then enter the [<>] source view of the rich text editor and modify the content of the <img> tag.
For example, with a Webcam input called 'mugshot', an image can be modified like:
<p><img alt="My Mugshot" src="{{webcam_fid:mugshot}}" /></p>
Once a file has been imported from quarantine and mapped to an fID with an uploader input called 'my_file', the input 'my_file' will now be the fID of the file. In this case an image can be modified like:
<p><img alt="My File" src="{{form:my_file}}" /></p>
With the HTML option, when the email is sent the {{webcam_fid:mugshot}} placeholder is expanded to the URL for the mugshot on your web server. Similarly the placeholder {{form:my_file}} is expanded to the URL of that file on your web server.
With the HTML with embedded images option,the {{webcam_fid:mugshot}} or {{form:my_file}} placeholders are expanded to a base 64 encoded copy of the image.
When the email is received, the recipient's mail client will display the image in the formatted email.
This last point of HTML with embedded images introduces a further possibility. Rather than importing an image to the file manager using the Import Quarantine Files handler, a quarantined file can be embedded directly into an email.
<p><img alt="My Mugshot" src="{{quarantine:mugshot}}" /></p>
If you only ever need an uploaded file to be part of an email, this can be a big advantage for both saving server space and GDPR because the file is not kept on the server.
This would not work with the HTML option, because the URL inserted would no longer be valid as soon as the quarantined file was cleared.
Attaching a file or image is a completely different mechanism to inserting images into the body of an email. In this case, the file is sent with the email as an attachment, hence will never need to refer back to a URL on the web server. The attachment is a frozen copy of the file at the time the email is sent.
Attachments can be any kind of file, including images.
The Attach Files section of the Send Email handler configuration has two means of configuring attachments that can be used individually or together.
In all cases it is the file that is attached, not a specific thumbnail, so it is up to you to make sure any file that could be attached to an email or embedded in an email is appropriately sized.
Our final option is a checkbox to not send an email. This will do everything connected with building an email, except that sending will be disabled. This can be useful when developing and testing a form. But please remember to actually enable the sending when you have finished testing!
The default validation for all email addresses is:
Validation is applied to any address that can be fixed at the time the edit dialogue is saved and again before an email is sent.
If your web server has the php function checkdnsrr() disabled, testing the MX record could be both extremely slow and always fail. Or it could even end in a server error. In such cases you may want to disable Test MX Record.
In form handlers these settings are global. Configure them in one Send Email form handler and the same settings are applied across all Send Email form handlers.
These settings can also be edited manually in /application/config at jl_form_reform.email.validation.
A further setting which is configuration file only is jl_form_reform.email.validation.minimal. When true, this will skip the entire core validator class and use basic php validation for the email address. The other flags would then be ignored. When set, this flag also overrides the validation settings for Email and Email Confirm input blocks.
In the form input blocks for Email and Email Confirm, similar settings are specific to just that form input. Thus email validation could be configured to Test MX for user entered email addresses when the form input is validated, but not checked so rigorously when the email is sent. This would be a fair optimization to configure and gain a few milliseconds on overall form processing time.
To send an email to multiple recipients, simply add them to the list of recipients in a single Send Email form handler.
The Recipient section is an extending list that can be added to and dragged into sequence.
To send different emails to different recipients, you can add more than one Send Email handler to the form handler pipeline, each with its own configuration.
You can also use a Condition If handler section to send different emails depending on form processing.
The Send Email handler is not designed to manage mailing lists and bulk email. Any kind of bulk email will require subscriber management and unsubscribe processing as a legal necessity in most countries. If you need to manage bulk email, consider using a mailing list service.
If you require a form to connect to a bulk email service, consider developing a specialized form handler plugin for Form Reform.
As noted above, the default php mail functionality is not designed form anything beyond trivial use. On many web servers it may be disabled. Many recipient servers will bounce email sent by php mail or flag it as spam. Hence if you are using the Form Reform Send Email handler, you should also consider configuring your site to use an external SMTP mail server.
This can be configured at Dashboard > System & Settings > Email > SMTP Method. More details are available in the Concrete CMS Documentation.
In your SMTP account, the address in the From field must be configured as an allowed sender. The most likely reason for an email to fail is that your SMTP account is not configured to send from this address.
If you need a specialized template or a custom input element, you can design new templates or new block types for form elements as you would any block type.
Blocks are easy for third party addition or extension. Block templates and are the first thing any Concrete CMS developer learns to code. They are one of the easiest things to code. The underlying mechanisms are well established and reliable.
Form handlers are built about the same extensible plugin system as many of my other addons (Universal Content Puller, Omni Gallery, Extreme Clean ...).
The whole system is aimed at easy extension within Form Reform, by third party addons, by agencies and by site building developers.
Handlers can be easily added to do whatever you want with the form data.
Saving form data with Form Reform is simply a handler in the processing pipeline. You can save to multiple locations or just one location.
If you need to save data elsewhere, such as to a dedicated table, a table provided through another addon, to another database, send it to an API, forward it to another server, or anywhere you can imagine, you can adapt or develop a form handler to do so.
The complexity of the code depends on where you are saving or sending the data, but wrapping that into a form handler plugin for Form Reform is straight forward.
The Form Reform handler plugin system is designed for easy extension.
Reform the way forms are built. Build a form out of blocks. Take control of how form submissions are processed and how the submitted data is stored. Easy to extend. Easy to reconfigure. Tangible data. Easy to add your own integrations.
List and display form submissions from Form Reform.
Not just Form Reform and not just UTM! Capture and hold incoming UTM (or other) tags and make the tag values available to Form Reform and/or Conditional Redirect as {{place_holders}}. You don't need Form Reform to use this.
Form handlers for querying Microsoft Dynamics, forwarding and updating form data to Microsoft Dynamics.
A suite of advanced image capture and upload tools. Enhanced drag and drop file uploading. Make screengrabs from within Concrete CMS. Capture images directly from device webcams. Edit images before uploading.
Save submitted forms to Express objects and user attributes. Add and remove users from groups.
Form Reform Image Picker provides an image picking input block for Form Reform. The Image Picker Input is preconfigured to connect to most Omni Gallery gallery and slider display widgets, the core gallery block, and thumbnail showing templates for the core page list block. Advanced settings allow the Image Picker Input to be configured to pick images from other galleries and sliders.
Form Reform Data Picker provides data picking input blocks for Form Reform. The Table Picker Input is preconfigured to connect to Universal Content Puller table display widgets. Advanced settings allow the Table Picker Input to be configured to pick data from other HTML tables.
Extends Form Reform with form handler macros. Provides a new dashboard page at System & Settings > Form Reform > Form Reform Macros to manage macros, and form handlers to run macros.
A growing suite of resources to assist those developing blocks, handlers and more complex forms for Form Reform.
While you may have plans to implement some much more complex forms using Form Reform, we strongly recommend you start with a simple form such as our contact form example in order to review the basic principles of using Form Reform before you move onto anything bigger.