---
title: "Contributing"
manual: "Microsoft Exchange 365 Mailer"
version: "main"
permalink: "https://docs.typo3.org/permalink/oliverkroener/ok-exchange365-mailer:contributing@main"
source: "Development/Contributing.rst"
rendered: "2026-10-04T20:03:13+00:00"
---

# Contributing {#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 {#contributing-branches}

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.

> [!NOTE]
> The branches are not simply older copies of `main`. They differ in the Graph
> SDK major, in how frontend TypoScript is read, and in how credentials are blinded.
> [Version Compatibility](https://docs.typo3.org/permalink/oliverkroener/ok-exchange365-mailer:compatibility@main) lists the differences.

## Before opening a pull request {#contributing-workflow}

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

    ```bash
    make test-matrix
    ```

    See [Testing](https://docs.typo3.org/permalink/oliverkroener/ok-exchange365-mailer:testing@main). A change to `main` should be green on v12, v13
    and v14.
1.  **Run static analysis and the coding standards fixer**, in that order — PHPStan
    first, `php-cs-fixer` second:

    ```bash
    Build/Scripts/runTests.sh --layers=phpstan,cgl
    ```
1.  **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.
1.  **Update the documentation** in `Documentation/` when you change behaviour
    or add a setting. Render it locally with `make docs`.

## Adding or renaming a setting {#contributing-settings}

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

1.  `Configuration/TypoScript/constants.typoscript`
1.  `Configuration/TypoScript/setup.typoscript`
1.  `Configuration/Sets/Exchange365Mailer/settings.definitions.yaml`
1.  `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 {#contributing-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:

```bash
grep -rn "<version>" . --exclude-dir=Documentation-GENERATED-temp --exclude-dir=.git
```

> [!NOTE]
> `composer validate` warns that the `version` field is present. That is
> intentional here, for TER and `ext_emconf.php` parity — it is not something
> to "fix".

## Getting in touch {#contributing-help}

Questions, bug reports and feature requests belong in the
[issue tracker](https://github.com/oliverkroener/ok_exchange365_mailer/issues) or
the [discussions](https://github.com/oliverkroener/ok_exchange365_mailer/discussions).
See also [Where to get help](https://docs.typo3.org/permalink/oliverkroener/ok-exchange365-mailer:help@main).
