---
title: "Feature: #107256 - PSR-14 event to modify options in EmailFinisher"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-107256-1754918566"
source: "Changelog/14.0/Feature-107256-PSR-14EventToModifyOptionsInEmailFinisher.rst"
modified: "2026-09-15T10:46:36+00:00"
---

# Feature: #107256 - PSR-14 event to modify options in EmailFinisher

See [forge#107256](https://forge.typo3.org/issues/107256)

## Description

A new PSR-14 event `\TYPO3\CMS\Form\Event\BeforeEmailFinisherInitializedEvent`
has been introduced. This event is dispatched before the
`EmailFinisher` 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 `EmailFinisher` options, the
following methods are available:

-   `getFinisherContext()`: Returns the
    `FinisherContext` containing
    form runtime and request information
-   `getOptions()`: Returns the current finisher options array
-   `setOptions()`: Allows setting the modified options array

## Example

The corresponding event listener class:

**Example event listener class**

```php
<?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
`EmailFinisher` options before email
processing begins, using the new PSR-14 event
`BeforeEmailFinisherInitializedEvent`. This
provides developers with full control over email configuration without needing
to extend or override the
`EmailFinisher` class.
