Mail system 

Extension key

mail

Package name

mediaessenz/mail

Version

main

Language

en

Author

Alexander Grein

License

This document is published under the Open Publication License.

Rendered

Fri, 07 Nov 2025 11:37:19 +0000


This extension implements a versatile mail system based on Extbase & Fluid and uses the latest technologies provided by TYPO3 CMS.


A quick introduction in how to use this extension.

Introduction to the mail extension, dependencies, general information.

In-depth reference about certain aspects of this extension: TypoScript, Page/User TSconfig, Site configuration etc

What does it do? 

MAIL is a TYPO3 backend module for sending personalized mails to different groups of recipients.

This can be done from an internal TYPO3 page, from an external URL or a simple text field.

The date time of sending can be scheduled, and it's done by a queue command controller which sends the mails in small packages to prevent blacklisting.

With an easy yaml configuration, included in a site configuration, it is possible to add any database table as recipient source as long all necessary fields are available.

Because this is (mostly) not the case, it is also possible to define an extbase model, where the mapping can be done inside a Configuration/Extbase/Persistence/Classes.php file.

The included mail template and some basic content elements are based on the mail template system of foundation: https://get.foundation/emails.html

Thanks to the same php sass parser used by bootstrap_package, it is possible to modify several settings (colors, widths, paddings, margin) using TypoScript constants.

The extension is highly inspired from direct_mail, and was the base of a massive refactoring. Kudos to all people who put there lifeblood and love in this project.

For all EXT:direct_mail users who wants to try out this extension: A direct_mail -> mail migration script can be found in the upgrade wizard of the TYPO3 install tool after installing MAIL.

Dependencies 

MAIL make use of several packages all found at packagist.org:

Kudos to all involved coders who put her love and energy in it. Without her, this extension would not exist.

Here comes a brief explanation of what each package is used for:

friendsoftypo3/tt-address 

Store mail recipients

friendsoftypo3/jumpurl 

Used for click tracking

typo3/cms-redirects 

Used for redirects of shorted links in plain text mails

scssphp/scssphp 

This package transpiles scss files to css, which makes it possible to use the scss files of foundation mail and change there values (colors, dimensions) using typoscript constants. I had to modify the original scss from foundation a little, because the scssphp package could currently not handle sass modules like math, which were used on some places. See https://github.com/scssphp/scssphp/issues/421 for more information. Basically, I just replaced all math.div() with /.

pelago/emogrifier 

This package is needed to convert all css to inline styles, which is unfortunately necessary for outlook and co.

league/html-to-markdown 

This package is used to convert an html mail to a plain text (markdown) version using a middleware, just by adding ?plain=1 to the url. It has the ability to add own converters, which is used by this extension to handle the mail boundaries, which wrapped around every content element.

masterminds/html5 

This package is used on several places to extract specific parts of a mail (e.g. links, images, special data attributes).

ddeboer/imap 

This package is used by the AnalyzeBounceMailCommand to read the mail account of returned mails.

Sponsoring 

This extension and the manual took several hundred hours to create. If this extension helps you in any way to meet your business needs, please consider to give something back.

Here are two ways to balance energy:

Patreon 

Support me on patreon.com

PayPal 

Support me on paypal.com.

It's just one click away!

Rate it 

In any case, please rate my extension here: https://extensions.typo3.org/extension/mail

and if you are using composer to install it, here as well: https://packagist.org/packages/mediaessenz/mail

To do so, you have to login first in the corresponding system.

Thank you!

Quick start 

  1. Installation
  2. Configuration

    Classic way
    1. Add or import recipient sources configuration yaml into site configuration
    2. Add a new MAIL sys-folder inside of your page tree
    3. Add static Page TSconfig files
    4. Set MAIL Backend Layout
    5. Include TypoScript Templates
    6. Configure Default Settings
    Site sets way (TYPO3 13 and above)
    1. Add a new Site Root for MAIL
    2. Add MAIL Site Set
    3. Set MAIL Backend Layout
    4. Configure the Styles of your mails
  3. Create Recipient Groups
  4. Create first mail:

    1. Create MAIL Pages
    2. Use Placeholder in MAIL Content
  5. Create mailing:

    1. Choose source
    2. Settings
    3. Categories
    4. Test mail
    5. Schedule sending
  6. Send mail manually
  7. Mail report
  8. Pitfalls

Quick installation 

To add this extension to your existing TYPO3 system, you have tree options:

  1. Composer installation (recommended)

    composer require mediaessenz/mail
    Copied!
  2. Extension manager

    Open "Admin and maintenance tools" > "TYPO3 extension manager" and search for "mail". Install it by clicking on the install button.

  3. Download

    Download it from here: https://extensions.typo3.org/extension/mail and use the extension manager to upload and install it.

Update the database scheme 

After the first install, depending of the way (composer or other), it could be necessary to update the database, to get ready for go.

Open your TYPO3 backend with t3start:system-maintainer permissions.

In the module menu to the left navigate to Admin Tools > Maintenance, then click on Analyze database and create all.

Clear all caches 

Clearing all caches after installing a new extension is always a good thing.

In the same module like before, you can also conveniently do this by clicking the button Flush cache.

Quick configuration 

Classic Way: TYPO3 11/12/(13) 

  1. Add recipient sources

    MAIL needs a yaml configuration for recipient sources. It comes with a ready configuration for frontend user groups (fe_groups), frontend user (fe_users) and addresses (tt_address).

    To add them all, just import the included yaml into your site configuration:

    imports:
       - { resource: "EXT:mail/Configuration/Site/RecipientSources.yaml" }
    Copied!

    Read more about how to add your own recipient sources in the Site configuration reference.

  2. Add a new sys-folder inside (!) of your page tree (not on page 0!)

    This folder will be used to store the MAIL pages later. Remember the uid of this new sys-folder page, you may need it in a later step.

    Open the settings of the new created sys-folder page, go to tab Behaviour and select MAIL Module under Contains plugin.

  3. Add static Page TSconfig files

    Switch to tab Resources and include this three static Page TSconfig entries:

    • MAIL: Remove not supported content element (mail)
    • MAIL: Add simple mail backend layout (mail)
    • MAIL: Default settings for mail pages (mail)

    Press the good old floppy disc icon to save.

    After that, a new backend layout MAIL should be available under the Appearance tab.

  4. Select MAIL backend layout

    Choose it for this page and also for the subpages.

  5. Include TypoScript templates

    To use the included table based content elements, a corresponding TypoScript is provided by this extension.

    Go module Web > Template and chose your MAIL sys-folder. If not already done, create an extension template. Switch to view Info/Modify and click on Edit the whole template record.

    Switch to the Advanced Options tab and check Constants and Setup to Clear every TypoScript settings from TypoScript records up in root-line.

    Additional Include the following TypoScript sets:

    • Fluid Content Elements (fluid_styled_content)
    • MAIL (mail)

    Read more about possible configurations via TypoScript in the Reference section.

  6. Configure default settings

    MAIL brings – similar to EXT:direct_mail – an easy way to adjust some default settings, used by the mail creation wizard.

    You find it by clicking on the cog button (Configuration) on the upper right corner of the MAIL wizard module.

    The input fields are divided into several groups, which can be reached by clicking on their titles.

    After filling all fields with your data, press SAVE to store.

Further reading 

Site Sets Way: TYPO3 13 

  1. Add a new site root in your page tree

    This site will be used to store the MAIL pages later. Remember the uid of this new page, you may need it in a later step.

    Open the settings of the new created page, go to tab Behaviour and switch on Use as Root Page. Additional select MAIL Module under Contains plugin. Also check Hide child pages in page tree, if you like to activate a usefull feature that helps you to keep track of an extensive page tree.

  2. Open the site configuration of the just created page

  3. Add Site Set

    Under the General Tab you can find all relevant settings. First of all you have to enter a Site Identifier (eg. newsletter). Second, add an Entry Point. This must be a full domain! Relative domains like "/" will not work! Same for optionaly added Variants.

    At Sets for this Site add the MAIL Fluid Styled Content Elements Set, which depends on the MAIL Settings Set, so that these do not need to be added separately.

    If you do not want to use the included content elements, which are currently based on fluid style content, you can also just add the MAIL Settings Set and then add your own set of content elements, which are based on content blocks, for example.

  4. Set Backend Layout

    Back in the TYPO3 Page Module, open the Settings of your MAIL Root Page. In here, click on the Appearance tab, select MAIL in both Backend Layout boxes and press Save.

    Now you are ready to add mail pages

  5. Styling

    To change the styles of the generated mails, go to the Settings Module and click on Edit Settings of your MAIL Site.

    E.g. change colors under Styles

Further reading 

Create recipient groups 

Since this extension is made to send personalized mails to groups of recipients, this groups has to be defined first.

MAIL comes with a lot of possibilities: 

  • From pages

    • Compare to EXT:direct_mail, MAIL is not limited to fe_groups, fe_users, tt_address and one custom table
    • It is possible to add as many tables you like, as long they have the needed fields or an extbase model which implements at least the RecipientInterface, defined in Classes/Domain/Model/RecipientInterface.php
    • To make it even more flexible it is possible to define query restrictions (for tables) or use the RecipientsRestrictionEvent (for extbase) to filter recipients list. Checkout https://gitlab.com/mediaessenz/additional-mail-recipients how to do it.
    • Beside the recipient source (table) it is also possible to set a starting point where the records should be taken from
    • Categories can also be set to filter the list of recipients to only those who have at least one of them assigned as well
  • Plain list

    • A comma separated list of recipients (just mails or names and mails separated by a comma or semicolon)
    • Compare to EXT:direct_mail, within MAIL you also can choose whether the recipients should get html or plain mails.
    • Categories are also assignable
  • CSV (Plain/File)

    • Configurable CSV input format (different separators, enclosures and check if first line contain field names)
    • If the first line doesn't contain the fieldnames, the order of the data must be "name", "email" and (optionally) "salutation"
    • The recipient list has a configurable duplicate filter (email by default)
    • Data can be plain pasted into the data field or from a selected csv file (must be utf-8 encoded!)
    • Compare to EXT:direct_mail, within MAIL you also can choose whether the recipients should get html or plain mails.
    • Categories are also assignable
  • Static list

    • Single records of all defined sources can be added – also fe_groups which will add all fe_users who have this groups assigned.
  • From other recipient lists

    • To make things even more flexible, it is also possible to create a compilation of different other recipient groups.

Some EXT:direct_mail power users may miss the possibility to define queries as sending groups. This feature is currently not available, and will maybe come with a future release. Sponsoring is highly welcome.

Importing CSV data to fe_users or tt_address table 

This module gives you the opportunity to import a csv (comma separates list) of addresses as fe_users or tt_address (if installed) records, which could be added as "From pages" or "Static list" recipient group afterwards.

To make it easier to import csv records a wizard guides you through the process.

If you have installed tt_address, you can first select the destination for your import.

In the next step you can choose the source of your import. Upload a csv file or paste the records into a text field. You can use comma (;), semicolon (;), colon (:) or tabs as field delimiter.

Clicking the NEXT button uploads the CSV data and displays the configuration step. In this step you can specify the detail information of the csv data, such as field delimiter, field encapsulation, and field name in the first line. You can also specify the sys-folder, where the records should be imported to, the uniqueness of the records, rename or update the records if a similar record is found, or to empty the sys-folder before importing and more.

Once you have entered all the information, proceed to the next step, where you can select the correct encoding for your data. To do this, check the value column in the table below to see whether special characters such as German umlauts are displayed correctly. UTF-8 should be the standard nowadays, but some CSV exports from older Windows systems may use other encodings such as Windows-1252.

If you wish to send HTML emails to all imported recipients, which is recommended, tick the corresponding checkbox.

Below determine categories and fe_groups (if you choose fe_users as destination) for all recipients.

Last but not least, start mapping the fields.

There are 3 columns in the mapping step. The description column shows the first row of the csv records (if you set in the configuration that the first row is the field names) or shows only field_xx (where xx is continuous number).

The mapping column shows only the list of field, which are part of the selected table. You must at least map the field “Name” and “Email”.

The value column shows the first up to three rows from the csv records. They should help you to map the field.

In the select box, which contains the field names of the choosen table, there is also an entry “categories”. This entry can be mapped to a comma-separated list of sys_category IDs. This value will overwrite whatever categories you selected in the above section.

After mapping the fields, you are ready to start the final import by pressing the NEXT button once again.

If finished a list of new imported, invalid email, updated and doublet records will be shown.

To create a recipient group from this records, you must add a new recipient group of the type “From pages” and select “Addresses” (if you imported the csv to tt_address) as Recipient source. Then choose the folder where you imported the records under "Startingpoint" and finally press Save.

Create MAIL page 

MAIL brings an own page type (#24, can be changed inside extension settings), which appear as a new icon (letter within an envelope) above the page tree, beside the other page type icons.

To create a new mail, just drag and drop the MAIL page icon inside the new mail sys-folder created in the corresponding configuration step.

Now you can add content to the MAIL page using the normal page module.

As you may notice, only a few content elements are available, and some of them do not work yet.

Currently only headline, text, text with image, text with media, image and html are working.

Additionally (untested) it should be possible to add a news plugin.

The included content elements are inspired by EXT:luxletter. Thanks to in2code for making it public.

Use Placeholder in MAIL Content 

To personalize your emails, you can use Placeholder inside your texts. Let's add a headline element and enter this content inside the headline field:

###USER_salutation###
Copied!

This is a marker or placeholder which will later be replaced by the individual recipient data.

There are a lot of other placeholders available:

###USER_uid###
###USER_salutation###
###USER_name###
###USER_title###
###USER_email###
###USER_phone###
###USER_www###
###USER_address###
###USER_company###
###USER_city###
###USER_zip###
###USER_country###
###USER_fax###
###USER_firstname###
###USER_first_name###
###USER_last_name###
Copied!

Additional ALL as uppercase version:

###USER_SALUTATION###
###USER_NAME###
...
Copied!

This will result in the uppercase salutation, name, ... of the recipient later.

Inspired by EXT:direct_mail, there are also some special placeholders available:

###MAIL_RECIPIENT_SOURCE###
###MAIL_ID###
###MAIL_AUTHCODE###
Copied!

To keep things simple for now, only add another content element to the MAIL page, e.g. a "text with image".

After adding some dummy text choosing an image, specify its position, save and close it.

Create mailing 

  1. Choose source

    Click the blue/white envelope icon of the MAIL wizard module.

    Choose the MAIL sys-folder and move over to the main content area of this module, where the accordion for "Internal Page" should now show the previous created MAIL page.

    With the two page preview buttons (page-eye-icon) you can get an idea how the mail will look like at the mail client of the recipient later.

    To continue click the NEXT button to get to the settings page.

  2. Settings

    On this page you can check and adjust the settings of the mail, whose defaults can be changed via the configuration on the previous page.

    You can either change individual values by clicking on them, or edit all of them at once by clicking the edit button.

    At this place it is also possible to add attachments by clicking on the paper clip button.

    If done, click NEXT again to get to the category settings.

  3. Categories

    Since it is possible to choose categories inside the different recipient sources (eg. fe_users, tt_address) it must also be possible to set categories inside the different content elements.

    This is what can be done here.

    During moving your mouse over a row of categories the corresponding content elements on the right side gets highlighted.

    To see categories at this place, they must be defined before, of course. How this can be done is described in the categories.

    But for now you can skip this step by click on NEXT, which brings you to the fourth step: test mail

  4. Test mail

    Here you can send a simple test mail to one or a list of mail addresses. But beware: The generated mail will include ALL content elements regardless of their categories. User fields will NOT be substituted with data.

    After pressing NEXT another time, you reached the last point of this wizard: Schedule sending

  5. Schedule sending

    On this site you can choose one (or more) recipient groups and the date/time when distribution should start.

    For our test, just choose the recipient group you created in the Create recipient group step and press FINISH.

Send mail 

With finishing the schedule step of the wizard, a mail is added to the MAIL queue, which has its own backend module. Watch out for the blue/white clock icon on the left side.

If you click that clock button, you should see your mailing on top now.

In case you did not have configured the MAIL sending queue command controller inside the TYPO3 scheduler module yet, you can press the button "Start sending manually" for now.

This will send the mail immediately to the members of the recipient group you choose in the last step of the MAIL wizard.

Now go to the mail program of your trust, to receive the recently generated mail.

Mail Report 

If you had included links to internal or external pages in the mail content and also enabled click tracking in the MAIL configuration module, you can also check which links were clicked and how often. To do this, move to the report's module by clicking on the pie chart icon:

To get the report of a specific mail, click on the corresponding mail subject:

Under the panel "Mail" you can see some basic stuff.

Under the panel "Performance" you can see some metrics about the responses.

This numbers, especially "Unique responses (links clicked)" and "Total responses/Unique responses" are taken from the code developed from the EXT:direct_mail team.

I have no clue, how relevant they are and even show the right values. If someone with marketing skills could give me feedback about it, I would really be happy.

The panel "Delivery failed" shows the different types of returned mails.

If returned mails found, a forth box will appear, to view, delete or disable the corresponding recipients.

Pitfalls 

Wrong Entry Point 

This extension needs an entry point with a protokoll and domain to proper fetch internal pages.

An entry point with just a slash ("/") will not work!

This value can be set here "Sites Module" > "Edit site" > "General" > "Entry Point".

If you e.g. use the introduction package, this value is set to "/" by default!

Self Signed Certificates 

If you use a self signed certificate, you should also check, that "HTTP" > "verify" is set to "0".

This can be done under "Admin Tools" > "Settings" > "Configure Installation Wide Options" > Filter by "verify" > enter "0" > Press "Write configuration"

Jumpurl Error Messages 

The current version of jumpurl found in ter (8.0.3) has some php 8 issues:

There is already a pending pull request, which unfortunately stuck in that state since a while:

To help your self out, you could download the zip of the pull request repo, which contains the necessary fixes under this url:

After downloading, rename the master.zip to jumpurl_8.0.3.zip and upload it within the extension manager.

Extension Configuration 

Some general settings can be configured in the Extension Configuration.

  1. Go to Admin Tools > Settings > Extension Configuration
  2. Choose mail

The settings are divided into several tabs and described here in detail:

Properties

Mail 

defaultRecipientFields

defaultRecipientFields
type

string

Default

uid, salutation, name, title, email, phone, www, address, company, city, zip, country, fax, firstname, first_name, last_name

Comma separated list of default recipient fields. Will be available by markers in a mail message. e.g. name as ###USER_name### or ###USER_NAME### filled with (uppercase) value of the user.

additionalRecipientFields

additionalRecipientFields
type

string

Default
 

Comma separated list of additional fields that may be substituted in the mail messages.

mailPageTypeNumber

mailPageTypeNumber
type

int

Default

24

MAIL page type number. Change this number only if another extension use the same.

mailModulePosition

mailModulePosition
type

string

Default

after:web

MAIL modules position in the side navigation. If set to empty, the module will move to the end of all other modules

mailModulePageId

mailModulePageId
type

int

Default
 

MAIL module page id. If set, page tree navigation will be hidden in MAIL module. Here you can add the uid of the MAIL sys-folder if you only have one.

mailModulePageIds

mailModulePageIds
type

string

Default

auto

MAIL module page id. Reduces the page tree of the mail modules to a comma separated list of page uids. If set to "auto" (default), the list will be automatically taken from the pages database table, based on the selected module. This value can be overwritten via userTS.

Feature 

hideNavigation

hideNavigation
type

bool

Default
 

Hide navigation: If set, page tree navigation will be hidden in mail module. User tsconfig parameter tx_mail.mailModulePageId has to be set!

deleteUnusedMarkers

deleteUnusedMarkers
type

bool

Default

1

Delete unused markers in personalized mails. All markers/placeholder without corresponding recipient data will remove from personalized mails.

notificationJob

notificationJob
type

bool

Default

1

Enable notification mail. Allow MAIL to send notification about start and end of a mailing job.

deactivateCategories

deactivateCategories
type

bool

Default

Deactivate categories. Attention: If set, ALL category fields inside tt_content,fe_users,tt_address,tx_mail_domain_model_group will be disabled!

useHttpToFetch

useHttpToFetch
type

bool

Default

Use http connection for fetching Newsletter-Content. Even if your TYPO3 Backend is in SSL-Mode, the URL for fetching the newsletter contents will be http

Direct Mail Migration 

directMailCategorySysCategoryMapping

directMailCategorySysCategoryMapping
type

string

Default
 

Mapping sys_dmail_category -> sys_category. Used by update wizard to migrate Direct Mail records to MAIL records. Format: 1:2,2:3,3:4 maps Direct mail category 1 to sys_category 2 and Direct mail category 2 to sys_category 3 and so on. If categories not found or set, new categories will be added.

directMailCategorySysCategoryParentCategory

directMailCategorySysCategoryParentCategory
type

int

Default
 

Parent sys_category used by sys_dmail_category -> sys_category migration. If the migrated categories should be attached to a parent sys_category.

Site Configuration 

This extension needs a existing site configuration to work, which should be standard nowadays.

There are two site configurations coming with this extension, both life inside the EXT:mail/Configuration/Site folder.

Transport.yaml 

This configuration should only be used as a copy base for your own mail transport settings. The supported parameters are the same as definable in $GLOBALS['TYPO3_CONF_VARS']['Mail'].

Adding one or more of this setting inside your site configuration is only necessary if you like to override the mail transport setting for a specific site. If a property is not set via site config, there corresponding system setting is used, defined in $GLOBALS['TYPO3_CONF_VARS']['Mail']. The overrides do only affect the transport settings used by EXT:mail or its MEDIAESSENZ\Mail\Mail\(Mailer|MailMessage) classes.

RecipientSources.yaml 

To add all recipient sources come with MAIL (fe_groups, fe_users, tt_address) you has nothing to do.

MAIL imports the settings stored in this file:

imports:
   - { resource: "EXT:mail/Configuration/Site/RecipientSources.yaml" }
Copied!

If you would like to add your own recipient sources, just add it to your site configuration under the key mail.recipientSources.

Here is an example of how to add a table which has all necessary fields (at least uid, email, name, salutation, mail_html, mail_active):

mail:
   recipientSources:
      tx_extension_domain_model_address: #<- Table name
         title: 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:tx_extension_domain_model_address.title' #<- title of the recipient source
         icon: 'tcarecords-tx_extension_domain_model_address-default' #<- icon identifier
Copied!

To simplify things a bit, it is also possible to ignore the mail_html and mail_active fields (they not need to exist at all). To do this, just add forceHtmlMail: true or/and ignoreMailActive: true to your recipientSource configuration.

It is also possible to use a table more than once to create recipient sources with a subset of e.g. tt_address records.

mail:
   recipientSources:
      female_tt_address:
         table: 'tt_address'
         title: 'Female filtered tt_address records using table'
         icon: 'tcarecords-tt_address-default'
         queryRestrictions:
           - 'MEDIAESSENZ\AdditionalMailRecipients\Database\Query\Restriction\FemaleRestriction'
         csvExportFields: [uid,gender,name,first_name,middle_name,last_name,title,email,phone,www,address,company,city,zip,country,fax,categories,mail_salutation,mail_html,tstamp]
Copied!

In this case the table name has to be defined as table property. To create a subset of tt_address records, one or more QueryRestrictions can be defined.

Such a QueryRestrictions could look like this:

<?php
namespace MEDIAESSENZ\AdditionalMailRecipients\Database\Query\Restriction;

use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;
use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
use TYPO3\CMS\Core\Database\Query\Restriction\QueryRestrictionInterface;

class FemaleRestriction implements QueryRestrictionInterface
{
    public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder): CompositeExpression
    {
        $constraints = [];
        foreach ($queriedTables as $tableAlias => $tableName) {
            if ($tableName === 'tt_address') {
                // attention: since gender is a string in tt_address the value has to be set in double quotes!
                // normally this should be done with help of the $queryBuilder->createNamedParameter('f', Connection::PARAM_STR)), but here we do not have the query builder :-(
                $constraints[] = $expressionBuilder->eq(
                    $tableAlias . '.' . 'gender',
                    '"f"'
                );
            }
        }
        return $expressionBuilder->and(...$constraints);
    }
}
Copied!

If a table doesn't contain the upper mentioned fields, or the fields have different names, it is also possible to use an extbase model to map fields to the need. A site configuration doing this could look like this:

mail:
   recipientSources:
      tx_extension_domain_model_address: #<- Table name
         title: 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:tx_extension_domain_model_address.title' #<- title of the recipient source
         icon: 'tcarecords-tx_extension_domain_model_address-default' #<- icon identifier
         model: Vendor\Extension\Domain\Model\MailAddress #<- the extbase model
Copied!

Beside of the site configuration a model definition and a mapping configuration is needed as well. Check the included model EXT:mail/Classes/Domain/Model/Address.php and EXT:mail/Configuration/Extbase/Persistence/Classes.php for how this can look like.

The model needs to implement at least the included RecipientInterface. If you like to use categories, to send specific parts of a mail only to a specific group of recipients, the included CategoryInterface has to be implemented as well.

Since this extension can handle simple tables and extbase models as well, and in the end its data only used to replace a simple placeholder like ###USER_name###, I decided to use simple arrays for transporting.

Because of this, every model needs to have a getEnhancedData method, which must return an array of all fields, which should serve as placeholder later on. Btw.: The same method will be used by the csv-export inside the recipient group module.

It is also possible to create a subset of record from a domain model source.

Since MAIL doesn't use the "normal" repository classes of a model, this restriction has to be added as an event listener (RecipientsRestrictionEvent).

An example how this could look like, can be found here: https://gitlab.com/mediaessenz/additional-mail-recipients

The responsible files in the example extension are
  • Configuration/Services.yaml (line 16-19)
  • Configuration/Site/RecipientSources.yaml (line 12-19)
  • Classes/EventListener/AddressModelRestriction.php.

Site Sets Settings 

MAIL Settings Set 

Name Type Label Default
Mail
Templates (Pages)
string Templates "...
string Templates "...
string Templates "...
Header
string Title "...
string Image Source "...
string Image Alternative Text "...
int Image Width 3...
Footer
page Terms Page 0
page Privacy Page 0
Dimensions
string Container width "...
string Container width (small screens... "...
int Images Max Width 5...
int Images Max Width (Aside Text) 1...
string Global gutter "...
string Global gutter (small screens) "...
string Global padding "...
string Global margin "...
string Global radius "...
string Global rounded "...
string Global breakpoint "...
Styles
color Used with components that supp... "...
color Used with components that supp... "...
color Success color "...
color Warning color "...
color Alert color "...
color Light gray color "...
color Medium gray color "...
color Dark gray color "...
color Black color "...
color White color "...
color Code color (<pre>) "...
color Headlines color "...
color Text color "...
color Header background color "...
color Body background color "...
color Container background color "...
color Footer background color "...
string Modifications "...

Mail

Mail
Label
Mail

Mail.pageTemplates

Mail.pageTemplates
Label
Templates (Pages)

plugin.mail.view.page.templatesRootPath

plugin.mail.view.page.templatesRootPath
Type
string
Default
"EXT:mail/Resources/Private/Templates/Mail/"
Label
Templates
Category
Mail > Templates (Pages)

Path to Page Templates

plugin.mail.view.page.partialsRootPath

plugin.mail.view.page.partialsRootPath
Type
string
Default
"EXT:mail/Resources/Private/Partials/"
Label
Templates
Category
Mail > Templates (Pages)

Path to Page Partials

plugin.mail.view.pages.layoutsRootPath

plugin.mail.view.pages.layoutsRootPath
Type
string
Default
"EXT:mail/Resources/Private/Layouts/"
Label
Templates
Category
Mail > Templates (Pages)

Path to Page Layouts

Mail.header

Mail.header
Label
Header

plugin.mail.settings.header.title

plugin.mail.settings.header.title
Type
string
Default
"Newsletter"
Label
Title
Category
Mail > Header

plugin.mail.settings.header.image.src

plugin.mail.settings.header.image.src
Type
string
Default
"EXT:mail/Resources/Public/Images/Logo.png"
Label
Image Source
Category
Mail > Header

plugin.mail.settings.header.image.alt

plugin.mail.settings.header.image.alt
Type
string
Default
"Logo"
Label
Image Alternative Text
Category
Mail > Header

plugin.mail.settings.header.image.width

plugin.mail.settings.header.image.width
Type
int
Default
300
Label
Image Width
Category
Mail > Header

Mail.dimensions

Mail.dimensions
Label
Dimensions

plugin.mail.settings.scss.global-width

plugin.mail.settings.scss.global-width
Type
string
Default
"600px"
Label
Container width
Category
Mail > Dimensions

Use in scss with: $global-width

plugin.mail.settings.scss.global-width-small

plugin.mail.settings.scss.global-width-small
Type
string
Default
"95%"
Label
Container width (small screens)
Category
Mail > Dimensions

Use in scss with: $global-width-small

styles.content.textmedia.maxW

styles.content.textmedia.maxW
Type
int
Default
550
Label
Images Max Width
Category
Mail > Dimensions

Max. width of images in text and media (above or below text)

styles.content.textmedia.maxWInText

styles.content.textmedia.maxWInText
Type
int
Default
165
Label
Images Max Width (Aside Text)
Category
Mail > Dimensions

Max. width of images in text and media (aside text)

plugin.mail.settings.scss.global-gutter

plugin.mail.settings.scss.global-gutter
Type
string
Default
"20px"
Label
Global gutter
Category
Mail > Dimensions

Use in scss with: $global-gutter

plugin.mail.settings.scss.global-gutter-small

plugin.mail.settings.scss.global-gutter-small
Type
string
Default
"20px"
Label
Global gutter (small screens)
Category
Mail > Dimensions

Use in scss with: $global-gutter-small

plugin.mail.settings.scss.global-padding

plugin.mail.settings.scss.global-padding
Type
string
Default
"20px"
Label
Global padding
Category
Mail > Dimensions

Use in scss with: $global-padding

plugin.mail.settings.scss.global-margin

plugin.mail.settings.scss.global-margin
Type
string
Default
"16px"
Label
Global margin
Category
Mail > Dimensions

Use in scss with: $global-margin

plugin.mail.settings.scss.global-radius

plugin.mail.settings.scss.global-radius
Type
string
Default
"3px"
Label
Global radius
Category
Mail > Dimensions

Use in scss with: $global-radius

plugin.mail.settings.scss.global-rounded

plugin.mail.settings.scss.global-rounded
Type
string
Default
"500px"
Label
Global rounded
Category
Mail > Dimensions

Use in scss with: $global-rounded

plugin.mail.settings.scss.global-breakpoint

plugin.mail.settings.scss.global-breakpoint
Type
string
Default
"$global-width + $global-gutter"
Label
Global breakpoint
Category
Mail > Dimensions

Use in scss with: $global-breakpoint

Mail.styles

Mail.styles
Label
Styles

plugin.mail.settings.scss.primary-color

plugin.mail.settings.scss.primary-color
Type
color
Default
"#037EAB"
Label
Used with components that support the .primary class
Category
Mail > Styles

Use in scss with: $primary-color

plugin.mail.settings.scss.secondary-color

plugin.mail.settings.scss.secondary-color
Type
color
Default
"#777777"
Label
Used with components that support the .secondary class
Category
Mail > Styles

Use in scss with: $secondary-color

plugin.mail.settings.scss.success-color

plugin.mail.settings.scss.success-color
Type
color
Default
"#3ADB76"
Label
Success color
Category
Mail > Styles

Use in scss with: $success-color

plugin.mail.settings.scss.warning-color

plugin.mail.settings.scss.warning-color
Type
color
Default
"#FFAE00"
Label
Warning color
Category
Mail > Styles

Use in scss with: $warning-color

plugin.mail.settings.scss.alert-color

plugin.mail.settings.scss.alert-color
Type
color
Default
"#EC5840"
Label
Alert color
Category
Mail > Styles

Use in scss with: $alert-color

plugin.mail.settings.scss.light-gray

plugin.mail.settings.scss.light-gray
Type
color
Default
"#F3F3F3"
Label
Light gray color
Category
Mail > Styles

Use in scss with: $light-gray

plugin.mail.settings.scss.medium-gray

plugin.mail.settings.scss.medium-gray
Type
color
Default
"#CACACA"
Label
Medium gray color
Category
Mail > Styles

Use in scss with: $medium-gray

plugin.mail.settings.scss.dark-gray

plugin.mail.settings.scss.dark-gray
Type
color
Default
"#8A8A8A"
Label
Dark gray color
Category
Mail > Styles

Use in scss with: $dark-gray

plugin.mail.settings.scss.black

plugin.mail.settings.scss.black
Type
color
Default
"#0A0A0A"
Label
Black color
Category
Mail > Styles

Use in scss with: $black

plugin.mail.settings.scss.white

plugin.mail.settings.scss.white
Type
color
Default
"#FEFEFE"
Label
White color
Category
Mail > Styles

Use in scss with: $white

plugin.mail.settings.scss.pre-color

plugin.mail.settings.scss.pre-color
Type
color
Default
"#FF6908"
Label
Code color (<pre>)
Category
Mail > Styles

Use in scss with: $pre-color

plugin.mail.settings.scss.header-color

plugin.mail.settings.scss.header-color
Type
color
Default
"#444444"
Label
Headlines color
Category
Mail > Styles

Use in scss with: $header-color

plugin.mail.settings.scss.global-font-color

plugin.mail.settings.scss.global-font-color
Type
color
Default
"#444444"
Label
Text color
Category
Mail > Styles

Use in scss with: $global-font-color

plugin.mail.settings.scss.header-background-color

plugin.mail.settings.scss.header-background-color
Type
color
Default
"#037EAB"
Label
Header background color
Category
Mail > Styles

Use in scss with: $header-background-color

plugin.mail.settings.scss.body-background

plugin.mail.settings.scss.body-background
Type
color
Default
"#F3F3F3"
Label
Body background color
Category
Mail > Styles

Use in scss with: $body-background

plugin.mail.settings.scss.container-background-color

plugin.mail.settings.scss.container-background-color
Type
color
Default
"#FEFEFE"
Label
Container background color
Category
Mail > Styles

Use in scss with: $container-background-color

plugin.mail.settings.scss.modifications

plugin.mail.settings.scss.modifications
Type
string
Default
"EXT:mail/Resources/Public/Scss/mail.scss"
Label
Modifications
Category
Mail > Styles

Scss file to modify the default scss of foundation mail

MAIL Fluid Styled Content Set 

Name Type Label Default
Templates Content Elements (Fl...
string Templates "...
string Templates "...
string Templates "...

Mail.content.templates

Mail.content.templates
Label
Templates Content Elements (Fluid Styled Content)

mail.view.content.templateRootPath

mail.view.content.templateRootPath
Type
string
Default
"EXT:mail/Resources/Private/Templates/ContentElements/"
Label
Templates
Category
Mail > Templates Content Elements (Fluid Styled Content)

Path to content element templates

mail.view.content.partialRootPath

mail.view.content.partialRootPath
Type
string
Default
"EXT:mail/Resources/Private/Partials/"
Label
Templates
Category
Mail > Templates Content Elements (Fluid Styled Content)

Path to content element partials

mail.view.content.layoutRootPath

mail.view.content.layoutRootPath
Type
string
Default
"EXT:mail/Resources/Private/Layouts/"
Label
Templates
Category
Mail > Templates Content Elements (Fluid Styled Content)

Path to content element layouts

TypoScript 

Page View Settings 

All page view settings need to be prefixed with plugin.mail.view.page.

Properties

templatesRootPath

templatesRootPath
type

string

Default

EXT:mail/Resources/Private/Templates/Mail/

Path

plugin.mail.view.page.templatesRootPath

Path to template root for mail pages (FE)

partialsRootPath

partialsRootPath
type

string

Default

EXT:mail/Resources/Private/Partials/

Path

plugin.mail.view.page.partialsRootPath

Path to partials root for mail pages (FE)

layoutsRootPath

layoutsRootPath
type

string

Default

EXT:mail/Resources/Private/Layouts/

Path

plugin.mail.view.page.layoutsRootPath

Path to layouts root for mail pages (FE)

Content View Settings 

All content view settings need to be prefixed with plugin.mail.view.content.

Properties

templatesRootPath

templatesRootPath
type

string

Default

EXT:mail/Resources/Private/Templates/ContentElements/

Path

plugin.mail.view.content.templatesRootPath

Path to template root for mail contents (FE)

partialsRootPath

partialsRootPath
type

string

Default

EXT:mail/Resources/Private/Partials/

Path

plugin.mail.view.content.partialsRootPath

Path to partials root for mail contents (FE)

layoutsRootPath

layoutsRootPath
type

string

Default

EXT:mail/Resources/Private/Layouts/

Path

plugin.mail.view.content.layoutsRootPath

Path to layouts root for mail contents (FE)

Header Settings 

All header settings need to be prefixed with plugin.mail.settings.header.

Properties

title

title
type

string

Default

Newsletter

Path

plugin.mail.settings.header.title

Title of the mail header

image.src

image.src
type

string

Default

EXT:mail/Resources/Public/Images/Logo.png

Path

plugin.mail.settings.image.src

Logo source

image.alt

image.alt
type

string

Default

Logo

Path

plugin.mail.settings.image.alt

Logo alt text

image.width

image.width
type

string

Default

300

Path

plugin.mail.settings.image.width

Logo width

image.height

image.height
type

string

Default
 
Path

plugin.mail.settings.image.height

Logo height

SCSS Settings 

All scss settings need to be prefixed with plugin.mail.settings.scss.

Properties

modifications

modifications
type

string

Default

EXT:mail/Resources/Public/Scss/mail.scss

Path

plugin.mail.settings.scss.modifications

Scss file to modify the default scss of foundation mail

primary-color

primary-color
type

color

Default

#037eab

Path

plugin.mail.settings.scss.primary-color

Primary color, used with components that support the .primary class

secondary-color

secondary-color
type

color

Default

#777777

Path

plugin.mail.settings.scss.secondary-color

Secondary color, used with components that support the .secondary class

success-color

success-color
type

color

Default

#3adb76

Path

plugin.mail.settings.scss.success-color

Color to indicate a positive status or action, used with the .success class

warning-color

warning-color
type

color

Default

#ffae00

Path

plugin.mail.settings.scss.warning-color

Color to indicate a caution status or action, used with the .warning class

alert-color

alert-color
type

color

Default

#ec5840

Path

plugin.mail.settings.scss.alert-color

Color to indicate a negative status or action, used with the .alert class

light-gray

light-gray
type

color

Default

#f3f3f3

Path

plugin.mail.settings.scss.light-gray

Color used for light gray UI items within Foundation

medium-gray

medium-gray
type

color

Default

#cacaca

Path

plugin.mail.settings.scss.medium-gray

Color used for medium gray UI items within Foundation

dark-gray

dark-gray
type

color

Default

#8a8a8a

Path

plugin.mail.settings.scss.dark-gray

Color used for dark gray UI items within Foundation

black

black
type

color

Default

#0a0a0a

Path

plugin.mail.settings.scss.black

Color used for black ui items within Foundation

white

white
type

color

Default

#fefefe

Path

plugin.mail.settings.scss.white

Color used for white ui items within Foundation

pre-color

pre-color
type

color

Default

#ff6908

Path

plugin.mail.settings.scss.pre-color

Code color (<pre>)

header-color

header-color
type

color

Default

#444444

Path

plugin.mail.settings.scss.header-color

Headlines color

global-font-color

global-font-color
type

color

Default

#444444

Path

plugin.mail.settings.scss.global-font-color

Text color

header-background-color

header-background-color
type

color

Default

#037eab

Path

plugin.mail.settings.scss.header-background-color

Header background color

body-background

body-background
type

string

Default

$light-gray

Path

plugin.mail.settings.scss.body-background

Body background color

container-background-color

container-background-color
type

string

Default

$white

Path

plugin.mail.settings.scss.container-background-color

Container background color

global-width

global-width
type

string

Default

600px

Path

plugin.mail.settings.scss.global-width

Container width

global-width-small

global-width-small
type

string

Default

95%

Path

plugin.mail.settings.scss.global-width-small

Container width (small screens)

global-gutter

global-gutter
type

string

Default

20px

Path

plugin.mail.settings.scss.global-gutter

Gutter for grid elements

global-gutter-small

global-gutter-small
type

string

Default

$global-gutter

Path

plugin.mail.settings.scss.global-gutter-small

Gutter for grid elements (small screens)

global-padding

global-padding
type

string

Default

20px

Path

plugin.mail.settings.scss.global-padding

Global padding

global-margin

global-margin
type

string

Default

16px

Path

plugin.mail.settings.scss.global-margin

Global margin

global-radius

global-radius
type

string

Default

3px

Path

plugin.mail.settings.scss.global-radius

Global radius

global-rounded

global-rounded
type

string

Default

500px

Path

plugin.mail.settings.scss.global-rounded

Global rounded radius of rounded-corners

global-breakpoint

global-breakpoint
type

string

Default

$global-width + $global-gutter

Path

plugin.mail.settings.scss.global-breakpoint

Global media query to switch from desktop to mobile styles

Content Objects 

This extension brings two new content object EMOGRIFIER and SCSS

EMOGRIFIER is used to transform all given css files to inline styles.

SCSS is used to transform given scss files to css.

See EXT:mail/Configuration/TypoScript/ContentElements/setup.typoscript for how to use.

Page TSconfig 

Restrict categories example 

Here is an Page TSconfig example of how to restrict a list of categories to a specific parent category (has uid 1 in this example):

TCEFORM.tt_content.categories.config.treeConfig.startingPoints = 1
TCEFORM.tt_content.categories.config.treeConfig.appearance.nonSelectableLevels = 0
TCEFORM.tt_address.categories.config.treeConfig.startingPoints = 1
TCEFORM.tt_address.categories.config.treeConfig.appearance.nonSelectableLevels = 0
TCEFORM.fe_users.categories.config.treeConfig.startingPoints = 1
TCEFORM.fe_users.categories.config.treeConfig.appearance.nonSelectableLevels = 0
TCEFORM.tx_mail_domain_model_group.categories.config.treeConfig.startingPoints = 1
TCEFORM.tx_mail_domain_model_group.categories.config.treeConfig.appearance.nonSelectableLevels = 0
Copied!

This config placed in the Page TSconfig field of the MAIL sys-folder page, will reduce all categories shown in tt_content, tt_address, fe_users and for simple list recipient groups living inside the MAIL sys-folder to the parent category with the uid 1.

Beside of this, the nonSelectableLevels = 0 lines prevent the parent category itself to be selectable.

User TSconfig 

The following properties may be used in user TSConfig (BE user or BE usergroups) to configure parts of the different MAIL modules.

hideTabs

hideTabs
type

string

Default
 
Path

tx_mail.hideTabs

Comma separated list of not needed mail sources in the mail wizard.

Available value:

  • internal: hide the internal page option
  • external: hide the external page option
  • quickmail: hide the quick mail option
  • draft: hide the draft mail option

defaultTab

defaultTab
type

string

Default

draft

Path

tx_mail.defaultTab

Possible options: internal, external, quickmail, draft

hideConfiguration

hideConfiguration
type

bool

Default
Path

tx_mail.hideConfiguration

Hide configuration button in mail wizard and queue module.

hideEditAllSettingsButton

hideEditAllSettingsButton
type

bool

Default
Path

tx_mail.hideEditAllSettingsButton

Hide edit all settings button in mail wizard settings step.

settingsWithoutTabs

settingsWithoutTabs
type

bool

Default
Path

tx_mail.settingsWithoutTabs

Show mail settings in wizard step and report without tabs.

settings.general

settings.general
type

string

Default

subject,fromEmail,fromName,organisation,attachment

Path

tx_mail.settings.general

Comma separated list of general fields which should be visible in the mail wizard settings step and report.

settings.headers

settings.headers
type

string

Default

replyToEmail,replyToName,returnPath,priority

Path

tx_mail.settings.headers

Comma separated list of header fields which should be visible in the mail wizard settings step and report.

settings.content

settings.content
type

string

Default

sendOptions,includeMedia,redirect,redirectAll,authCodeFields

Path

tx_mail.settings.content

Comma separated list of content fields which should be visible in the mail wizard settings step and report.

settings.source

settings.source
type

string

Default

type,renderedSize,page,sysLanguageUid,plainParams,htmlParams

Path

tx_mail.settings.source

Comma separated list of source fields which should be visible in the mail wizard settings step and report.

readOnlySettings

readOnlySettings
type

string

Default

type,renderedSize

Path

tx_mail.readOnlySettings

Comma separated list of fields which should be read only in the mail wizard settings step. Attention: this is only a visual restriction! If the user has the rights to change the corresponding fields of the tx_mail_domain_model_mail table he/she will be able to do this by clicking the "edit complete record" button! To prevent this, you have to restrict the fields in the usergroup settings (exclude fields) as well.

hideCategoryStep

hideCategoryStep
type

bool

Default
Path

tx_mail.hideCategoryStep

hideExcludeRecipientGroups

hideExcludeRecipientGroups
type

bool

Default
Path

tx_mail.hideExcludeRecipientGroups

Hide the exclude recipient groups in the last mail wizard step.

showSendingPriority

showSendingPriority
type

bool

Default
Path

tx_mail.showSendingPriority

Show the sending priority in the last mail wizard step. Mails marked as "high" will be send before other mails.

defaultSendingPriority

defaultSendingPriority
type

int+

Default
Path

tx_mail.defaultSendingPriority

Set the default sending priority for the last mail wizard step.

Possible values are:

0 - Normal

1 - High

hideManualSendingButton

hideManualSendingButton
type

bool

Default
Path

tx_mail.hideManualSendingButton

Hide manual sending button in queue module.

hidePauseButton

hidePauseButton
type

bool

Default
Path

tx_mail.hidePauseButton

Hide pause and continue button in queue module.

hideDeleteRunningSendingButton

hideDeleteRunningSendingButton
type

bool

Default
Path

tx_mail.hideDeleteRunningSendingButton

Hide delete running sending button in queue module.

hideDeleteReportButton

hideDeleteReportButton
type

bool

Default
Path

tx_mail.hideDeleteReportButton

Hide delete report button in report module.

mailModulePageId

mailModulePageId
type

int

Default
 
Path

tx_mail.mailModulePageId

If extension configuration parameter hideNavigation is set to 1 or mailmodulepageid <extension-configuration-mail-module-page-id> is set to a mail module page, this value can be set to a (different) mail module page id. This way it is possible to show a user individual mail module.

mailModulePageIds

mailModulePageIds
type

string

Default
 
Path

tx_mail.mailModulePageIds

Reduces the page tree of the mail modules to a comma separated list of page uids. If set to "auto", the list will be automatically taken from the pages database table, based on the selected module (see here). This value overrides the extension configuration with the same name.

This setting is ignored if mailModulePageId or hideNavigation is set, because this will result in no page tree at all!

hideAddNewRecipientListButton

hideAddNewRecipientListButton
type

bool

Default
Path

tx_mail.hideAddNewRecipientListButton

Hide the icon for adding a new recipient list in the Recipient module.

hideRecipientImportButton

hideRecipientImportButton
type

bool

Default
Path

tx_mail.hideRecipientCsvImportButton

Hide the csv import button

hideRecipientCsvImportFeUsersButton

hideRecipientCsvImportFeUsersButton
type

bool

Default
Path

tx_mail.hideRecipientCsvImportFeUsersButton

Hide the csv import button for fe_users

hideRecipientCsvImportTtAddressButton

hideRecipientCsvImportTtAddressButton
type

bool

Default
Path

tx_mail.hideRecipientCsvImportTtAddressButton

Hide the csv import button for tt_address

Events 

AdditionalMailHeadersEvent 

Adds possibility to modify mail headers

DeactivateRecipientsEvent 

To deactivate returned mail recipients within the report module (beside tt_address and fe_users), it is necessary to register corresponding event listeners.

See MEDIAESSENZ\Mail\EventListener\DeactivateAddresses and DeactivateFeUsers for example.

ManipulateCsvImportDataEvent 

Adds possibility to modify csv data during import them to tt_address records. This needs tt_address to be installed.

ManipulateMailRecipientsEvent 

Adds possibility to manipulate the recipients list of a mailing right after finishing the mail wizard.

ManipulateMarkersEvent 

See MEDIAESSENZ\Mail\EventListener\AddUpperCaseMarkers for example.

ManipulateRecipientEvent 

See MEDIAESSENZ\Mail\EventListener\ManipulateAddressRecipient and MEDIAESSENZ\Mail\EventListener\ManipulateFrontendUserRecipient for example.

RecipientsRestrictionEvent 

Adds possibility to restrict recipients from extbase model sources

ScheduledSendBegunEvent 

Adds possibility to do something after scheduled sending begun

ScheduledSendFinishedEvent 

Adds possibility to do something after scheduled sending finished

Need more? 

Please contact me

Command Controller 

MAIL comes with tree different command controller, which all can be added as task inside the TYPO3 scheduler module.

MassMailingCommand 

This command is responsible for adding scheduled mailings to the sending queue. There are two mandatory parameters:

  • site-identifier
  • send-per-cycle

The first one (site-identifier) is the identifier of the site configuration where MAIL can find its recipient sources configuration. You can find it inside the TYPO3 sites module under the "General" tab.

The second (send-per-cycle) determine how many mails should be sent per cycle.

The time between a cycle can be defined in the "Frequency" field of a task. e.g. * * * * * will run the task every minute, if you put 50 into the send-per-cycle field, 50 Mails per minute will be sent.

AnalyzeBounceMailCommand 

This command fetches returned mails from the mail account defined in the return-path field of the MAIL configuration module. Depends on special headers, the reason of the return will be added to the report of the corresponding mail.

SpoolSendCommand 

This command controller can be used to send mail in a queue. It's basically the same coming with TYPO3, but it uses a site specific mail transport configuration. See site configuration Transport.yaml under Integration up in this manuel. To make this command controller work, it is also necessary to set transport_spool_type to file or memory. if the type was set to file, the transport_spool_type has to be set as well, e.g. to upload/tx_mailspool/. This command controller is not really needed by this extension, since the sending is already queued by the MassMailingCommand. But if a developer wants to use the extended Mail-Classes MEDIAESSENZ\Mail\Mail\(Mailer|MailMessage) inside their own extension, it can be usefully.

ClearScssParserCacheCommand 

This command controller clears the scss parser cache files located in typo3temp/assets/mail/css. This cache is also cleared after a mail report is deleted.

ViewHelpers 

PreviewLinksViewHelper 

Usage: 

<f:variable name="previewLinks" value="{mail:previewLinks(uid:uid,pageId:pageId)}"/>
Copied!

Parameters: 

uid: 

Uid of the mail page

pageId: 

Page id of the mail-sys-folder containing the mail configuration mod.web_modules.mail.sendOptions.

Returns: 

Preview-links, title, languageUid and flag-icon-identifiers for every language and type (plain/html), grouped by types. The types (plain and/or html) will be taken from the Page TSconfig parameter mod.web_modules.mail.sendOptions from the given pageId, defined with e.g. the mail configuration module under "Mail format (default)".

GetBodyContentViewHelper 

Extract the body tag content of the mail html content. Used to embed the mail html content.

Usage: 

{mail.htmlContent -> mail:getBodyContent()}
Copied!

RemoveMailBoundariesViewHelper 

Remove the mail boundaries from the mail plain content. Used to embed the mail plain text content.

Usage: 

{mail.plainContent -> mail:removeMailBoundaries()}
Copied!

ConstantViewHelper 

Usage: 

   <f:variable name="contentSelectionBoundary" value="{mail:constant(name:'CONTENT_SECTION_BOUNDARY')}"/>
<!--{contentSelectionBoundary}_-->Content for all<!--{contentSelectionBoundary}_END-->
<!--{contentSelectionBoundary}_1-->content for category 1<!--{contentSelectionBoundary}_END-->
<!--{contentSelectionBoundary}_1,2,3-->content for category 1, 2 and 3<!--{contentSelectionBoundary}_END-->
Copied!

Parameters: 

name: 

Name of the constant

classFQN: 

Full qualified name of the class containing the constants. Default: MEDIAESSENZMailConstants

Returns: 

The value of the constant if exists, otherwise null.

3.0.0 - 26th Sept. 2024 

TYPO3 13 compatibility + Recipient group refactoring 

  • Add more possibilities to manipulate recipient groups using query restrictions on tables or extbase model based recipient sources
  • Enhanced csv based recipient groups
  • Add feature to reduce the list of recipients of a mailing by choosing one or more other recipient groups
  • Improved bounce mails handing (needs IMAP account now!)

New features 

Breaking changes 

  • Recipient Source Configurations now uses the DTO MEDIAESSENZ\Domain\Model\Dto\RecipientSourceConfigurationDTO.

    Previously the getRecipientSourceConfiguration method of the following events returns an array:

    • ManipulateMarkersEvent
    • ManipulateRecipientEvent
    • DeactivateRecipientEvent

    Please adjust your event listeners to use e.g. $recipientsSourceConfiguration->table instead of $recipientsSourceConfiguration['table']. There is also a custom property available to transfer custom yaml config into event listeners.

    mail:
      recipientSources:
        myCustomDataSource:
          custom:
            foo: bar
    Copied!

    This will be available as $recipientsSourceConfiguration->custom['foo'] in an event listener.

  • Plain Lists and CSV recipient groups are now different recipient group types. A migration wizard to convert from the old to new format comes with this version. Attention: Before using the migration wizard please do a database compare, but do not rename or remove the field "csv" in the first step! After the new fields "csv_type", "csv_data", "csv_separator" and "csv_file" have been generated, goto admin tools > upgrade and click on upgrade wizard. Here start the wizard with the title: "EXT:mail: Migrate mail group type plain to plain or new group csv, depending on csv type.". After this, you can safely delete the field "csv" from the tx_mail_domain_model_group database table.
  • Mail records now have a status field, which can hold (currently) 5 different states:

    • 0 = DRAFT
    • 1 = SCHEDULED
    • 2 = SENDING
    • 3 = PAUSED
    • 4 = ABORTED
    • 5 = SENT

    There is an update wizard to convert existing mail records. Please do not delete the mail database field "sent" or rename it to "zzz_deleted_sent" before running it once!

    As a side effect, the backend module of the queue now only shows scheduled mails that have not yet been sent.

  • For a better bounce mail handling MAIL now uses ddeboer/imap instead of tedivm/fetch. Since ddeboer/imap only can handle IMAP accounts, the possibility to use a POP3 account for collecting bounce mails is dropped. As the mail server type parameter in the bounce mail command is therefore obsolete, it is also deleted. The parameter "count", to set the number of bounce mail to be processed per run, was dropped as well, since it should not be a critical thing, to handle all found bounce mail in one run. Due to this changes, all scheduler task using this command may be corrupt after updating to MAIL 3.0. In dought just recreate them.

3.1.0 - 31th Oct. 2024 

New features 

  • Add ManipulateMailRecipientsEvent to manipulate the array of recipients of a mail after pressing the finish button in the mail wizard.

    This event can be helpful to remove duplicate email recipients comming from multiple selected recipient lists.

    Please note that recipients with the same email may have subscribed to different email categories. If this is the case and a mailing also uses the category function, caution is advised!

3.2.0 - 6th Nov. 2024 

New features 

  • Enhance the ManipulateFrontendUserRecipients to also normalize the phone field (from telephone) if the source is table

Bug Fixes 

  • CSV sendings now do not stop after the first sending period anymore
  • Recipient data containing null or 0 are now also have this value in there corresponding markers
  • The getRecipientsDataByUidListAndModelName, responsible for getting the data of recipients from a model source, now make use of the getEnhancedData method

3.3.0 - 24th Feb. 2025 

Bug Fixes & Changes 

  • Creating and sending mails in other languages then default (0) had some issues which needs to change several files:

    • Templates/Backend/Mail/Index.html (preview modals link changed)
    • ViewHelpers/PreviewLinksViewHelper.php (change way how to get links to translated pages and add page title to return array)
    • Configuration/TCA/tx_mail_domain_model_mail.php (remove 'languageField' => 'sys_language_uid', from the ctrl section, since this field is only used to fetch the right language from a given internal page, not from the mail record it self)
  • Make all included viewhelpers future proof by changing them from renderStatic to render

3.4.0 - 5th June. 2025 

Bug Fixes & Changes 

  • Improved migration logic by adding checks for record validity and content structure within DirectMailMigration.
  • Enhanced documentation with notes on excluding links from tracking.
  • Performed bug fixes in UpperCaseMarkers handling.
  • Updated dependencies in composer.lock of phar package for TER releases to newer versions for PHP-CSS-Parser and Symfony Polyfills.
  • Fix permalinks in documentation guides.xml.
  • Refactor ViewHelpers and improve multilingual support.
  • Update URL counter logic in ReportService.php

3.5.0 - 5th June. 2025 

Bug Fixes & Changes 

  • Add missing link to change log of manual. List of changes can be found under 3.4.0 - 5th June. 2025

3.6.0 - 4th July. 2025 

Sending Priority Feature 

  • Add sending priority to the last step of the mail wizard. Mails set to "high" will be send before other mails. At the end of an already running sending cycle, triggered by the scheduler task, a currently running delivery will be paused, until the mail with the higher priority was sent out.
  • New page and user TsConfig parameters (defaultSendingPriority, showSendingPriority) are available to set the default priority and show/hide the priority selector. The sending priority selector is set to hidden by default!
  • hideExcludeRecipientGroups is now also available as pageTsConfig parameter (mod.web_modules.mail.hideExcludeRecipientGroups)

3.7.0 - 11th Aug. 2025 

CSV Duplicates Filter 

  • Recipient lists of type csv includes a configurable duplicate filter now. The default setting filters out duplicate email recipients by its email address. By adding more fields to the corresponding configuration field (CSV deduplicate fieldnames) it is possible to restict this filter by e.g. the name field. If you e.g. enter "email,name" into this field, only CSV entries with the same value in both fields will be deduplicated. For the compare email field will be trimed and lowercased before. Other fields will only be trimmed before comparing. So emails like "MyCoolEmail@domain.com" and "mycoolemail@domain.com" will be handled as duplicates, but names with values "Mister X" and "mister x" are not duplicates. Always the first entry "wins" and make it into the final sending list. Since this feature adds a new database field, please do a database compare after updating!

3.8.0 - 4th Sep. 2025 

CSV Import fe_users 

  • Add CSV importer for fe_users records (Thanks to Stig Nørgaard Færch for contribution)
  • Add hideRecipientCsvImportButton user tsconfig parameter
  • Add hideRecipientCsvImportFeUsersButton user tsconfig parameter
  • Add hideRecipientCsvImportTtAddressButton user tsconfig parameter

3.9.0 - 16th Oct. 2025 

Site Sets 

Add MAIL Settings and MAIL Fluid Styled Content Elements Site Sets.

If you like to switch to site sets configuration, aware that the root page of MAIL has be changed to a "real" site root. Additional do not forget to remove old TypoScript or TsConfig settings!

Guide to configure the new MAIL Site Sets

Recipient Groups in Report 

The report modul now shows the selected recipient groups and the exclude recipient groups of a mail in an own tab.

Sitemap