---
title: "Backend Module: Web > Notification Messages"
manual: "Laravel-style notification system for TYPO3"
version: "1.4"
source: "Usage/Index.rst"
modified: "2026-09-14T21:25:06+00:00"
---

> [!TIP]
> Use the table of contents in the left panel to navigate.

# Backend Module: Web > Notification Messages

> [!NOTE]
> The backend module is **one built-in application** of the notification
> system, not the primary feature. For sending notifications from PHP code,
> see [Developer Reference](../Developer/Index.html#developer-api). The module source code
> (`Classes/Controller/Backend/NotificationController.php`) is also a
> useful **reference implementation** of how to dispatch batch notifications
> to a resolved list of `Notifiable` recipients.

After installation, navigate to **Web > Notification Messages** in the TYPO3 backend.
The module lets editors compose messages and deliver them to frontend users
(individuals or groups) via email and/or database notifications.

## Listing Messages

The module overview displays all composed messages in a paginated list
(50 per page). Each row shows:

-   **Level** — severity badge (Info, Notice, Warning, Error, …)
-   **Subject** — message title
-   **Created** — creation date and author
-   **Sent at** — timestamp of last send, or "Not sent" if pending
-   **Actions** — Send / Resend buttons

Use the filter bar at the top to narrow results by level.

## Composing a Message

Click the **Create** button (pencil icon) in the module button bar.

| Field | Required | Description |
| --- | --- | --- |
| Level | Yes | Severity of the notification (Info, Notice, Warning, …). Displayed as a badge in both the backend list and the notification email. |
| Subject | Yes | Short title of the message (max 255 characters). |
| Message | Yes | Full message body. Supports basic HTML. |
| Link | No | Optional URL or internal TYPO3 page link displayed as a call-to-action button in the notification. |
| Recipients | Yes | Select one or more **frontend users** or **frontend user groups**. All members of selected groups will receive the notification. |
| Excluded recipients | No | Frontend users to exclude from delivery (useful to target a group but skip specific members). |
| Channels | No | Select one or more delivery channels: **Mail** and/or **Database**. If left empty, both channels are used. |

Click **Save** to store the message without sending it.

## Sending Messages

After saving (or from the list view), click the **Send** button. The module
will:

1.  Resolve all recipient UIDs from the selected users and groups, minus any
    excluded recipients.
1.  Remove duplicates.
1.  Load `NotifiableFrontendUser` objects for each resolved UID.
1.  Instantiate a `BackendUserSentMessageToFrontendUser` notification.
1.  Call `$dispatcher->send($recipients, $notification)` — the same call you
    would make from your own PHP code.
1.  Record the `sent_at` timestamp on the message record.
1.  Display a flash message confirming how many recipients were notified.

> [!NOTE]
> `BackendUserSentMessageToFrontendUser` implements `ShouldQueue`, so
> actual delivery is handled by the Symfony Messenger worker. If no worker is
> running, messages sit in the queue until it is started. To bypass the queue,
> call `sendNow()` — see [Developer Reference](../Developer/Index.html#developer-api).

## Resending Messages

Click **Resend** to dispatch a message again to the same recipients and
channels. The `sent_at` timestamp is updated. Useful when delivery failed
or you want to send a reminder.

## Using the Module as a Code Sample

The backend module is deliberately simple so that its source code is easy
to read. If you need to send batch notifications from your own extension,
study `NotificationController::sendAction()` — it shows the full pattern:

```php
// Simplified version of what the module does:

$recipients = $this->resolveRecipients($message);   // returns Notifiable[]

$notification = new BackendUserSentMessageToFrontendUser(
    subject:  $message->getSubject(),
    message:  $message->getMessage(),
    level:    $message->getLevel(),
    link:     $message->getLink(),
    channels: $this->parseChannels($message),
);

$this->notificationDispatcher->send($recipients, $notification);
```

Replace `BackendUserSentMessageToFrontendUser` with your own
`Notification` subclass and `$recipients` with any collection of
`Notifiable` objects to adapt this pattern to your use case.
