This document is published under the
CC BY-SA 4.0
license. The extension itself is proprietary software, see the
LICENSE file in the repository root.
Rendered
Fri, 04 Sep 2026 21:29:45 +0000
A TYPO3 extension that provides a backend module to compose TYPO3 pages as
newsletters and send them through the Universal Messenger API.
Editors build a newsletter with the usual TYPO3 content elements on a
dedicated Newsletter page type, preview it per language in a
backend module, and send it as a test or live dispatch to a channel
imported from Universal Messenger.
🚀 Introduction
What the extension does, requirements and compatibility.
💻 Installation
Installing the extension via Composer and setting up the database.
⚙️ Configuration
Webservice credentials, extension settings, backend user rights and
TypoScript.
📧 Usage
Creating newsletters, content elements, ViewHelpers and the
dispatch module.
Introduction
What does it do?
Universal Messenger lets editors compose a newsletter as a normal TYPO3
page, using the site's usual content elements, and send it through the
Universal Messenger webservice.
A dedicated Newsletter page type carries the newsletter
content and a selectable Universal Messenger channel.
A backend module renders a per-language preview of the newsletter and
triggers a TEST or LIVE dispatch to Universal Messenger.
A console command imports the newsletter channels that are configured
in Universal Messenger, so editors always see the current channel list
in the page properties.
Fluid ViewHelpers and dedicated content elements (for example a
personalization control structure) integrate with Universal Messenger's
placeholder and templating conventions.
Shipped TypoScript renders the newsletter content with the Foundation
for Emails 2 framework and
inlines the resulting CSS, so the newsletter HTML matches what most
email clients render correctly.
Requirements
TYPO3
TYPO3 14.0 or later. The extension does not support earlier TYPO3
versions, see Version matrix.
PHP
PHP 8.2 to 8.5.
Universal Messenger server
Version 7.56.0 or later for API-key basic authentication, see
Webservice.
Backend module access
A backend user with access to the Netresearch module
group and rights on the relevant newsletter channels, see
Backend user permissions.
Version matrix
Extension version
TYPO3 version
3.x
14.0 - 14.99
2.x
13.4, 12.4
The 2.x line also carries the umopen/cmsbs.open authentication
token required by Universal Messenger servers older than 7.56.0. See the
SDK compatibility notes for
details.
Installation
Composer
Install the extension via Composer:
Install the extension
composer require netresearch/universal-messenger
Copied!
Activate the extension in the Admin Tools > Extensions backend
module if your installation does not activate required extensions
automatically.
Update the database structure
The extension adds the newsletter page type and its channel-selection
field to the pages table. Open Admin Tools > Maintenance
and run Analyze Database Structure to add the missing fields.
Site configuration
The extension ships its default TypoScript two ways, so no manual
"include static template" step is required for either kind of site:
Classic sites (sys_template based) receive the default
TypoScript automatically through a global TypoScript registration.
Site Set based sites load the same TypoScript by adding
netresearch/universal-messenger to the site's Set dependencies.
config/sites/<site-identifier>/config.yaml
dependencies:-netresearch/universal-messenger
Copied!
Two additional static templates provide the Fluid rendering of the
newsletter content and an example newsletter page template. Include them
as described in TypoScript.
After installation, continue with Configuration to set up the
Universal Messenger webservice credentials.
Configuration
Configuring the extension has four parts, best done in this order:
Webservice -- store the Universal Messenger API
credentials.
Extension configuration -- set the storage page,
the newsletter page type number, and other extension-wide defaults.
To access the Universal Messenger API, store the connection configuration
in additional.php, under TYPO3_CONF_VARS >
EXTENSIONS > universal_messenger (note the spelling, it uses the
extension key, not the Composer package name).
Your Universal Messenger API URL, the basis of all requests, for
example https://your-domain.td.universal-messenger.de/p.
apiKey
apiKey
type
string
Required
true
The public key of your Universal Messenger API key, used as the HTTP
basic authentication username.
apiSecret
apiSecret
type
string
Required
true
The secret key of your Universal Messenger API key, used as the HTTP
basic authentication password.
Important
The Universal Messenger REST API is not versioned on the client side,
the authentication scheme depends on the Universal Messenger server
version. API-key basic authentication requires a Universal Messenger
server 7.56.0 or later. The umopen/cmsbs.open token is
deprecated since UM 7.41 and works only transitionally, older servers
require the 2.x line of this extension and of the underlying SDK.
Create the API key in the Universal Messenger backend, under the API key
management for your account.
API logging
To log Universal Messenger API requests and responses, enable
enableLogging (see Extension configuration)
and add a log writer configuration to ext_localconf.php:
Open Admin Tools > Settings > Extension Configuration and
switch to the universal_messenger extension.
General
Extension configuration tab General
storagePageId
storagePageId
type
int
Default
Path
General > Storage page ID
The page ID used to store the Universal Messenger newsletter channel
records.
newsletterPageDokType
newsletterPageDokType
type
int
Default
20
Path
General > Page type
The page type (doktype) used for Universal Messenger newsletter
pages. Change this if the default value already selects a different
page type in your installation.
Webservice
Extension configuration tab Webservice
enableLogging
enableLogging
type
boolean
Default
false
Path
Webservice > Enable logging
Log all Universal Messenger API requests and responses to a log file,
see API logging.
Expert
Extension configuration tab Expert
newsletter.testChannelSuffix
newsletter.testChannelSuffix
type
string
Default
_Test
Path
Expert > Test newsletter channel suffix
The suffix that marks a Universal Messenger channel as a TEST channel,
see Test and live channels.
newsletter.liveChannelSuffix
newsletter.liveChannelSuffix
type
string
Default
_Live
Path
Expert > Live newsletter channel suffix
The suffix that marks a Universal Messenger channel as a LIVE channel.
Test and live channels
To test a newsletter before it goes out, set up a separate test channel
in Universal Messenger and give it the configured suffix, for example:
Test operation
Channel Newsletter_TEST, sent to a defined recipient list used to
validate the newsletter before the real dispatch.
Live operation
Channel Newsletter_LIVE, sent to the recipient list with actual
customer addresses.
Use the Universal Messenger tab on the backend user (or
backend user group) record to grant individual editors rights to send
newsletters through specific newsletter channels.
Backend user configuration, Universal Messenger tab
Note
The newsletter page type appears in the page tree's "new page" drag
area automatically. Administrators always see it, non-admin editors
see it only when the Newsletter page type is enabled in
their backend group under Access Rights > Page types.
Since TYPO3 v14.2 the drag area is derived from these group
permissions, the former
options.pageTree.doktypesToShowInNewPageDragArea user TSconfig
option is deprecated and is removed in v15.0. If your installation
still sets that option explicitly, either add the newsletter page
type to the list or, preferably, drop the deprecated option and grant
the page type through the group permission instead.
TypoScript
The extension's default TypoScript (the newsletter preview page type, the
plugin and the content element configuration) is loaded automatically, see
Site configuration. Two further static templates
render the actual newsletter markup and are required for newsletters
to work, they are not loaded automatically.
Fluid content elements
Provides the Fluid rendering used for the newsletter view and the
newsletter container template. Without it, the backend preview and the
dispatch to Universal Messenger have no template to render.
On classic (sys_template based) sites, go to the Web >
Template module, select Edit TypoScript Record, then
Edit the whole TypoScript record. On the Advanced
Options tab, add Universal Messenger: Fluid Content Elements to the
list of included static templates.
On Site Set based sites, the same TypoScript is already imported by the
netresearch/universal-messenger Set, no extra step is needed.
Additional CSS files that are inlined as style attributes into the
respective HTML elements when a newsletter is rendered, in addition to
the Foundation for Emails 2 base CSS the extension already
includes by default.
The backend module preview uses module.tx_universalmessenger, keep
it in sync with the frontend plugin setup as shown above.
Note
Some HTML elements used by the bundled Fluid partials are not
reset by the shipped ZurbFoundation.css, nor by browser
default stylesheets. For example, the Textpic/Media
partials render images inside <figure>, and browsers apply a
default margin to it (Chrome: margin: 1em 40px) that
Foundation for Emails never resets, since its own image
component is class-based (.thumbnail) rather than built on
<figure>. This shrinks the image's content box and can make
a width: 100% image rule look "too narrow" compared to the
surrounding text column. If you hit this, add your own reset
(for example figure { margin: 0; }) to your own
inlineCssFiles entry, other elements may need the same
treatment depending on your design.
Example newsletter template
Provides an example newsletter backend layout and page template as a
starting point for a project-specific newsletter design.
On classic sites, include the static template `Universal Messenger:
Example Newsletter Template` the same way as above. On Site Set based
sites it is imported together with the Fluid content elements template.
Open the page where the layout should apply, switch to the page
properties Resources tab, and add `Universal Messenger:
Backend Layout to the :guilabel:Page TSconfig selection. The layout is
then selectable on the page's :guilabel:Layout` tab.
Usage
Basic concepts
Universal Messenger newsletter channels are imported into TYPO3 as
generic channels, the configured test or live suffix (see
Test and live channels) is cut
off during import, regardless of upper or lower case.
A newsletter page is therefore always assigned to a single generic
channel name. The split between a TEST and a LIVE dispatch happens only
when the newsletter is actually sent, in the backend module described in
Backend module.
Each imported newsletter channel can carry additional, per-channel
settings. A re-import does not overwrite them:
Field
Default value
Description
Sender email address
Overrides the sender ID preset in the webservice configuration, if set.
Reply-to email address
Overrides the reply-to ID preset in the webservice configuration, if set.
Skip used ID
false
Cancel sending if a newsletter with the same event ID already exists in the archive.
Embed images
none
Behavior for embedding images in the dispatched newsletter.
These settings are sent to the Universal Messenger API together with the
newsletter content.
Note
If "Embed images" is set to all, Universal Messenger downloads
the images from your TYPO3 instance's public URLs to embed them into
the newsletter. This only works if those URLs are covered by the
cmsbs.contentDownloader.urlAllowList configured on the Universal
Messenger server side. Ask your Universal Messenger contact to add
your domain to the allow list before using all, otherwise the
newsletter dispatch fails with an `EventException: Ressource(n)
fehlen in "html body"`` error. ``byPath` only rewrites the image
URLs to relative links and is not affected by this restriction.
Importing newsletter channels
The console command universal-messenger:newsletter-channels:import
imports the newsletter channels currently configured in Universal
Messenger.
Configure it as a Scheduler task (Execute console
commands) to keep the channel list in TYPO3 in sync with Universal
Messenger automatically, for example once a day.
To create a new newsletter, create a new page in the TYPO3 backend. Use
the Newsletter shortcut in the page tree's "new page" drag
area, or create a standard page and change its type afterwards.
Create a new newsletter page
For a standard page, open the page properties and select the page type
Newsletter.
Select the Newsletter page type
The page reloads, and a selection for the Universal Messenger newsletter
channel appears below the page type field. Select the channel this
newsletter should be sent through.
Select the newsletter channel
Build the newsletter with the usual TYPO3 content elements. Use a
container framework such as container_elements if you
need to group elements into columns and rows.
The extension also provides ViewHelpers (see ViewHelpers)
and content elements (see Content elements) to arrange
content according to the Foundation for Emails 2 framework the shipped rendering
is built on.
Content elements
The extension provides content elements for use with the Universal
Messenger API.
Control structure
In the content element's settings, enter the corresponding control
structure (for example a personalized
salutation) that Universal Messenger substitutes when the newsletter is
sent. Also specify the alternative text shown when the newsletter is
opened in a web view, where personalization is not available.
Content element Control structure
Both the control structure and the alternative text can be formatted
using the RTE editor and adapted to the newsletter's layout.
Note
tt_content.control_structure is registered as a standalone
FLUIDTEMPLATE object, so it bypasses whatever wrapping a site
theme applies to other content types. If you need to wrap its
website-rendered output (but not the mail rendering) in your own
site-level TypoScript, scope the override using the classic
stdWrap.if / data = GP:... pattern, not a TypoScript
condition with ExpressionLanguage array access on
request.getQueryParams():
Safe: "GP:type" returns an empty string, never a PHP warning, when the "type" GET parameter is absent
A condition such as `[request.getQueryParams()["type"] !=
1715682913]`` crashes with an HTTP 500 whenever the ``type` GET
parameter is absent, i.e. on every plain page view without a
newsletter render type: Symfony ExpressionLanguage's array-access
node has no null-coalescing equivalent to PHP's ??, so the
resulting E_WARNING: Undefined array key is escalated by TYPO3's
default SYS.exceptionalErrors configuration into a fatal,
uncaught exception.
ViewHelpers
Initialization
To use the extension's ViewHelpers in a Fluid template, declare their
namespace:
Marks a value as a Universal Messenger placeholder using curly brackets,
so it can be passed as a literal placeholder inside a URL, for example the
unsubscribe link of a newsletter.
Mark the "identifier" value as a Universal Messenger placeholder
Universal Messenger replaces {identifier} with the actual value when
the newsletter is sent.
Backend module
Open the backend module by clicking Universal Messenger under
the Netresearch group in the left-hand navigation.
Open the Universal Messenger backend module
Select the newsletter page you want to send. If you have the appropriate
access rights (see Backend user permissions), a preview of the
newsletter is shown exactly as it would be transferred to Universal
Messenger and sent. A language switcher appears above the preview when
the newsletter exists in multiple languages.
Note
The language switcher only appears if the newsletter page itself has
been localized (for example via the page tree context menu or the
language column in the Page module), translating individual
content elements alone is not sufficient. This mirrors TYPO3 core's own
page-translation detection and applies regardless of how many languages
are configured for the site.
Newsletter preview
Below the preview, two buttons trigger a TEST dispatch and the final LIVE
dispatch, see Basic concepts for how the target channel is derived.
The LIVE dispatch must be confirmed again in a dialog before it is sent.
Note
Once a newsletter page has been sent LIVE, the module keeps showing a
status banner ("The newsletter has been sent out: ...") every time it is
opened for that page and language, not just once right after sending.
This is not a stale flash message, the module derives a deterministic
event ID from the site, page and language, and queries Universal
Messenger for that exact ID's status on every request. Once that ID has
been sent, its status stays "finished" in Universal Messenger, so the
banner keeps reappearing. This is the visible counterpart of the "Skip
used ID" channel setting, which cancels a resend of an already-used
event ID, the banner is a reminder that this newsletter/language
combination has already gone out, not a report of a send that just
happened.
Reference to the headline
Copy and freely share the link
This link target has no permanent anchor assigned.The link below can be used, but is prone to change if the page gets moved.