PHPackages                             dmk/mkoptin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dmk/mkoptin

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

dmk/mkoptin
===========

MK Optin Extension

v10.0.0(4y ago)057GPL-2.0-or-laterPHPPHP ^7.4

Since Dec 8Pushed 2y ago12 watchersCompare

[ Source](https://github.com/DMKEBUSINESSGMBH/typo3-mkoptin)[ Packagist](https://packagist.org/packages/dmk/mkoptin)[ Docs](http://www.dmk-ebusiness.de/)[ RSS](/packages/dmk-mkoptin/feed)WikiDiscussions 10.4 Synced today

READMEChangelog (1)Dependencies (15)Versions (2)Used By (0)

MK Optin
========

[](#mk-optin)

[![TYPO3 compatibility](https://camo.githubusercontent.com/3e97080e7735ffb92dd0335a364e3417db4472d72563f2b08484d6d451bbac38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31302e342d6f72616e67653f6d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d7479706f33)](https://camo.githubusercontent.com/3e97080e7735ffb92dd0335a364e3417db4472d72563f2b08484d6d451bbac38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31302e342d6f72616e67653f6d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d7479706f33)[![Latest Stable Version](https://camo.githubusercontent.com/29a58fdd25a180c400e403d3cd53bdda8f27aed396a50f45737c6390f20be1c1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f646d6b2f6d6b6f7074696e2e7376673f6d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d636f6d706f736572)](https://packagist.org/packages/dmk/mkoptin)[![Total Downloads](https://camo.githubusercontent.com/486ce6c0a68bf51b7ce7cf1dc0580187973ceb589890972534a3daa690338950/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f646d6b2f6d6b6f7074696e2e7376673f6d61784167653d33363030267374796c653d666c61742d737175617265)](https://packagist.org/packages/dmk/mkoptin)[![Build Status](https://camo.githubusercontent.com/4a62ac7aeaeb56a0a13c7948ed81479b697a4814eeab3aacd182c6900368d108/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f444d4b45425553494e455353474d42482f7479706f332d6d6b6f7074696e2f70687063692e796d6c3f6272616e63683d31302e34266d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d6769746875622d616374696f6e73)](https://github.com/DMKEBUSINESSGMBH/typo3-mkoptin/actions/workflows/phpci.yml)[![Code Coverage](https://camo.githubusercontent.com/c2fd292320f6642ebcf5515cfcfce242449e8929271fb458451b0756f4c96a5a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d25334525334425323039302532352d677265656e3f6d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d636f6465636f76)](https://github.com/DMKEBUSINESSGMBH/typo3-mkoptin/actions?query=workflow%3A%22PHP+Checks%22)[![License](https://camo.githubusercontent.com/10535311b0f2bd4ee77a2480cef82c224e9068834e24a046894a38d9ab369eca/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f646d6b2f6d6b6f7074696e2e7376673f6d61784167653d33363030267374796c653d666c61742d737175617265266c6f676f3d676e75)](https://packagist.org/packages/dmk/mkoptin)

This TYPO3 extension provides an opt-in process via fluid mails.

What it does in short:

- Can be triggered to send an Opt-In-E-Mail
- Processes the verification via activation link in email.
- triggers a opt-in validation success event.
- Adds opt-in information to tca.

Installation
------------

[](#installation)

Install TYPO3 via composer.
From project root you need to run

```
composer require dmk/mkoptin

```

Start a new opt-in process
--------------------------

[](#start-a-new-opt-in-process)

```
class MyAwesomeManager
{
    private OptinManager $optinManager;

    public function __construct(
        OptinManager $optinManager
    ) {
        $this->optinManager = $optinManager;
    }

    protected function handleOptIn(string $email): void
    {
        $optin = $this->optinManager->createOptinForEmail($email);

        // opt in already done :)
        if ($optin->isValidated()) {
            // opt-in already performed, do your finalize stuff here

            return;
        }

        // opt-in outstanding, send opt-in mail
        // finalize stuff has to be performed by event listener after opt-in validation

        $this->optinManager->sendValidationMailForOptin($optin);
    }
}
```

register opt-in validation success event listeners
--------------------------------------------------

[](#register-opt-in-validation-success-event-listeners)

Why we need this?
To do things after the email has been verified, such as activate the record or send confirmation emails.

```
services:
    DMK\MyAwesomeExtension\Event\EventListener\OptinValidationSuccessEventListener:
        tags:
            -
                name: 'event.listener'
                identifier: 'MyAwesomeOptinValidationSuccessEventListener'
                event: DMK\Optin\Event\OptinValidationSuccessEvent
```

```
class OptinValidationSuccessEventListener
{
    private MyAwesomeManager $manager;

    public function __construct(
        MyAwesomeManager $manager
    ) {
        $this->manager = $manager;
    }

    public function __invoke(OptinValidationSuccessEvent $event): void
    {
        $this->manager->handleOptinValidation($event->getOptin());
    }
}

class MyAwesomeManager
{
    public function handleOptinValidation(Optin $optin): void
    {
        // opt-in performed, do your finalize stuff here
    }
}
```

Add opt-in information to TCA
-----------------------------

[](#add-opt-in-information-to-tca)

In order to output the opt-in information for a data record, the following TCA column must be added:

```
return [
    'columns' => [
        'optin' => [
            'label' => 'LLL:EXT:mkoptin/Resources/Private/Language/locallang_db.xlf:tx_mkoptin_domain_model_optin',
            'config' => [
                'type' => 'user',
                'renderType' => 'optInStateElement',
            ],
        ],
    ]
];
```

[![OptIn State Element](Documentation/Images/OptInStateElement.png "OptIn State Element")](Documentation/Images/OptInStateElement.png)

WARNING: Currently the field in the data record must always be `email`!

Templates
---------

[](#templates)

```
plugin {
    tx_mkoptin {
        view {
            templateRootPath = EXT:myawesomeextension/Resources/Private/Templates/Optin
            partialRootPath = EXT:myawesomeextension/Resources/Private/Partials/Optin
            layoutRootPath = EXT:myawesomeextension/Resources/Private/Layouts/Optin
        }
    }
}

```

@TODOs
------

[](#todos)

- Implement table email field configuration

###  Health Score

24

—

LowBetter than 31% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 97.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~638 days

Total

2

Last Release

1029d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/5131653?v=4)[Michael Wagner](/maintainers/rengaw83)[@rengaw83](https://github.com/rengaw83)

![](https://www.gravatar.com/avatar/b0f42c674d10d07667556ec6a435fd657236977083564418d83df8790cafe0ed?d=identicon)[dmkbot](/maintainers/dmkbot)

---

Top Contributors

[![rengaw83](https://avatars.githubusercontent.com/u/5131653?v=4)](https://github.com/rengaw83 "rengaw83 (35 commits)")[![hannesbochmann](https://avatars.githubusercontent.com/u/6302628?v=4)](https://github.com/hannesbochmann "hannesbochmann (1 commits)")

---

Tags

opt-inphptypo3typo3-extensionTYPO3 CMSoptin

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/dmk-mkoptin/health.svg)

```
[![Health](https://phpackages.com/badges/dmk-mkoptin/health.svg)](https://phpackages.com/packages/dmk-mkoptin)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[pagemachine/typo3-formlog

Form log for TYPO3

23238.6k8](/packages/pagemachine-typo3-formlog)[yoast-seo-for-typo3/yoast_seo

Yoast SEO for TYPO3

511.7M9](/packages/yoast-seo-for-typo3-yoast-seo)[web-vision/wv_deepltranslate

DeepL Translate (CORE) - This extension provides option to translate content element, and TCA record texts to DeepL supported languages.

33304.0k](/packages/web-vision-wv-deepltranslate)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

1595.5k](/packages/eliashaeussler-typo3-form-consent)[web-vision/deepltranslate-core

DeepL Translate (CORE) - This extension provides option to translate content element, and TCA record texts to DeepL supported languages.

33142.5k8](/packages/web-vision-deepltranslate-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
