viewmend / typo3-mailings
ViewMend Mailings - Send targeted TYPO3 email mailings to frontend users and groups with scheduling, hourly limits and delivery history.
Package info
github.com/phpner/viewmend-typo3-mailings
Type:typo3-cms-extension
pkg:composer/viewmend/typo3-mailings
Requires
- php: >=8.3 <8.6
- ext-sodium: *
- typo3/cms-backend: ~13.4.0 || ~14.3.0
- typo3/cms-core: ~13.4.0 || ~14.3.0
- typo3/cms-extbase: ~13.4.0 || ~14.3.0
- typo3/cms-fluid: ~13.4.0 || ~14.3.0
- typo3/cms-rte-ckeditor: ~13.4.0 || ~14.3.0
- viewmend/sdk: ^1.2
- viewmend/typo3-core: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.87
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.5
README
viewmend/typo3-mailings is a standalone TYPO3 product for sending targeted
email mailings to frontend users. Administrators compose the message, select
active users or frontend user groups, choose a start time and hourly limit, and
then freeze the audience into a durable local delivery queue.
The extension uses the configured TYPO3 Mailer. It does not provide another
SMTP implementation and it does not depend on Auto-replies, InboxMend, or Site
Tracker. viewmend/typo3-core supplies only the shared ViewMend Dashboard and
product registration contract. viewmend/sdk supplies the optional signed
ViewMend automatic-delivery connection.
Supported platform
- PHP 8.3–8.5
- TYPO3 13.4 LTS and TYPO3 14.3
- MySQL/MariaDB, PostgreSQL, or SQLite through Doctrine DBAL
- TYPO3 frontend users and frontend user groups
Install
composer require viewmend/typo3-mailings vendor/bin/typo3 extension:setup
Open ViewMend → Mailings. Creating a mailing does not send anything. The message and selected audience remain editable until Queue mailing is used. Queueing creates one immutable local recipient job per unique normalized email address. Disabled users, expired users, deleted users, and invalid email addresses are excluded.
Automatic delivery without server cron
The Settings tab can connect ViewMend automatic delivery with a one-time
connection token. The extension registers its fixed signed callback through
viewmend/sdk; the administrator chooses only how often the queue should be
checked. No system cron, TYPO3 Scheduler task, callback URL, request body, or
signature header needs to be configured manually.
Connection tokens are encrypted at rest with a key derived from TYPO3
SYS.encryptionKey and are not returned to the browser after saving. Signed
callback bodies are verified before work starts. Repeated run IDs are handled
idempotently and do not repeat completed queue work.
Delivery history also provides Run due delivery for an administrator who wants to start a bounded pass immediately. Existing process managers can call the same worker without changing delivery semantics:
vendor/bin/typo3 viewmend:mailings:work --limit=50
Delivery and rate semantics
The hourly limit is enforced by a database-backed counter shared by manual,
CLI, and ViewMend-triggered workers. Multiple workers cannot independently
consume the full limit. A recipient snapshot and message content hash are
verified immediately before each attempt. A processing lease that expires
after sending started becomes Unknown; it is not silently sent again.
Accepted by transport means the configured TYPO3/Symfony Mailer accepted the
message. It does not prove that the recipient inbox received it. Recoverable
transport errors use bounded retry with backoff. Permanent or exhausted errors
remain visible in Delivery history and can be retried manually.
Recipient data retention
The Settings tab controls how long completed recipient details are kept; the default is 90 days. Maintenance removes names, addresses, immutable recipient snapshots, delivery rows, expired rate windows, and completed callback-run records while preserving aggregate mailing totals. Every queue pass performs a bounded maintenance run. Installations with an existing maintenance process can also run it explicitly:
vendor/bin/typo3 viewmend:mailings:retention --limit=250
Message safety
The visual editor supports a controlled email-oriented HTML subset, HTTPS
images, inline email styles, and the merge fields recipient.name,
recipient.email, and mailing.title. Scripts, forms, embeds, event handlers,
unsafe URLs, unsupported CSS, comments, and unknown merge fields are removed.
Merge values are escaped before they enter HTML.
Only TYPO3 administrators can manage mailings in version 1.0.0. Sender values start with the TYPO3 mail configuration and can be changed per mailing before it is queued.
Repository boundary
This repository owns the Mailings schema, audience selection, editor, queue, rate limiting, delivery history, ViewMend callback, tests, and release artifacts. Other ViewMend products have separate repositories and release cycles.
Uninstall and stored data
Removing the Composer package does not silently delete mailing content, recipient history, or encrypted automatic-delivery settings. Pause active mailings, disconnect automatic delivery, export anything that must be retained, and run the retention command before uninstalling. Database tables can then be removed deliberately through the TYPO3 schema workflow after a verified backup.
Support and security
Use GitHub Issues for reproducible bug reports and feature requests. Report suspected security vulnerabilities privately to support@viewmend.com.