Feature: #107256 - PSR-14 event to modify options in EmailFinisher
See forge#107256
Description
A new PSR-14 event
\TYPO3\
has been introduced. This event is dispatched before the
\Email is initialized and allows
listeners to modify the finisher options dynamically.
This enables developers to customize email behavior programmatically, such as:
- Setting alternative recipients based on frontend user permissions
- Modifying the email subject or content dynamically
- Replacing recipients with developer email addresses in test environments
- Adding or removing CC or BCC recipients conditionally
- Customizing reply-to addresses
The event provides access to both the finisher context (read-only) and the options array, allowing for flexible manipulation of the email configuration.
To modify the
\Email options, the
following methods are available:
get: Returns theFinisher Context () Finishercontaining form runtime and request informationContext get: Returns the current finisher options arrayOptions () set: Allows setting the modified options arrayOptions ()
Example
The corresponding event listener class:
<?php
namespace MyVendor\MyExtension\Form\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Form\Event\BeforeEmailFinisherInitializedEvent;
final class BeforeEmailFinisherInitializedEventListener
{
#[AsEventListener('my_extension/form/modify-email-finisher-options')]
public function __invoke(BeforeEmailFinisherInitializedEvent $event): void
{
$options = $event->getOptions();
$context = $event->getFinisherContext();
// Overwrite recipients based on FormContext
if ($context->getFormRuntime()->getFormDefinition()->getIdentifier() === 'my-form-123') {
$options['recipients'] = ['user@example.org' => 'John Doe'];
}
// Modify subject dynamically
$options['subject'] = 'Custom subject: ' . ($options['subject'] ?? '');
// Clear CC and BCC recipients
$options['replyToRecipients'] = [];
$options['blindCarbonCopyRecipients'] = [];
$event->setOptions($options);
}
}
Impact
It is now possible to dynamically modify
\Email options before email
processing begins, using the new PSR-14 event
Before. This
provides developers with full control over email configuration without needing
to extend or override the
\Email class.