Contributing 

Contributions are welcome. The one thing worth knowing before you open a pull request is that this repository does not use a single main line.

The branch-per-major model 

Each supported TYPO3 major has its own long-lived branch:

Branch TYPO3 Use it for
main 12.4, 13.4, 14.x All new features and fixes.
feature-typo3-11 11.5 ELTS Backports only.
feature-typo3-10 10.4 ELTS Backports only.
feature-typo3-9 9.5 Backports only.

Target ``main`` unless the bug only exists on an older line. A fix that matters for the maintenance branches is applied to main first and then backported, so the history stays readable.

Before opening a pull request 

  1. Run the test matrix for the majors your change affects:

    make test-matrix
    Copied!

    See Testing. A change to main should be green on v12, v13 and v14.

  2. Run static analysis and the coding standards fixer, in that order — PHPStan first, php-cs-fixer second:

    Build/Scripts/runTests.sh --layers=phpstan,cgl
    Copied!
  3. Keep declare(strict_types=1) on new classes. The TYPO3 coding standards preset does not enforce it, so a file missing it passes the fixer silently.
  4. Update the documentation in Documentation/ when you change behaviour or add a setting. Render it locally with make docs.

Adding or renaming a setting 

A setting exists in four places, and all four must change together:

  1. Configuration/TypoScript/constants.typoscript
  2. Configuration/TypoScript/setup.typoscript
  3. Configuration/Sets/Exchange365Mailer/settings.definitions.yaml
  4. getMailSettingsConfiguration() in Classes/Mail/Transport/Exchange365Transport.php

Missing one of them produces a setting that is editable in the backend but never reaches the transport — or the reverse.

Releasing 

The version appears in five places and they drift easily:

  • composer.json → version
  • ext_emconf.php → version
  • README.md → the version badge URL
  • Documentation/guides.xml → release
  • Documentation/**/*.rst → any versionadded directive

Find every occurrence before tagging:

grep -rn "<version>" . --exclude-dir=Documentation-GENERATED-temp --exclude-dir=.git
Copied!

Getting in touch 

Questions, bug reports and feature requests belong in the issue tracker or the discussions. See also Where to get help.