Bumps [validators](https://github.com/python-validators/validators) from 0.35.0 to 0.36.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/python-validators/validators/releases">validators's releases</a>.</em></p> <blockquote> <h2>0.36.0</h2> <p><em><strong>Breaking</strong></em> ⚠️</p> <ul> <li>Drops support for Python <code>v3.9</code> and <code>v3.10</code>. Python <code>v3.11</code> or newer is required. (<a href="https://redirect.github.com/python-validators/validators/pull/488">#488</a>)</li> <li>Stricter validation: the following inputs, previously accepted by mistake, are now rejected. <ul> <li><code>isin()</code> now verifies the check digit, which was previously ignored. Lowercase ISINs are still accepted. (<a href="https://redirect.github.com/python-validators/validators/pull/464">#464</a>)</li> <li><code>cusip()</code> and <code>sedol()</code> require a numeric check digit. (<a href="https://redirect.github.com/python-validators/validators/pull/487">#487</a>)</li> <li><code>md5()</code>, <code>sha1()</code>, <code>sha224()</code>, <code>sha256()</code>, <code>sha384()</code>, <code>sha512()</code>, <code>base16()</code>, <code>base32()</code>, <code>base58()</code> and <code>base64()</code> reject trailing characters, such as a trailing newline. (<a href="https://redirect.github.com/python-validators/validators/pull/486">#486</a>)</li> <li><code>ind_pan()</code> requires a full-string match. (<a href="https://redirect.github.com/python-validators/validators/pull/478">#478</a>)</li> <li><code>fr_ssn()</code> no longer accepts a comma as the gender or Corsica department character. (<a href="https://redirect.github.com/python-validators/validators/pull/469">#469</a>, merged as <a href="https://redirect.github.com/python-validators/validators/pull/491">#491</a>)</li> <li><code>domain()</code> rejects an underscore in the last label (<a href="https://redirect.github.com/python-validators/validators/pull/485">#485</a>) and names longer than 253 octets once IDNA-encoded, as defined by RFC 1035. (<a href="https://redirect.github.com/python-validators/validators/pull/461">#461</a>)</li> <li><code>mastercard()</code> accepts only the 2221-2720 range of the 2-series BINs. (<a href="https://redirect.github.com/python-validators/validators/pull/467">#467</a>)</li> <li><code>eth_address()</code> rejects non-hexadecimal characters. (<a href="https://redirect.github.com/python-validators/validators/pull/466">#466</a>)</li> <li><code>mac_address()</code> rejects mixed separators. (<a href="https://redirect.github.com/python-validators/validators/pull/432">#432</a>)</li> <li><code>slug()</code> rejects a trailing newline, and telnet URIs reject control characters. (<a href="https://redirect.github.com/python-validators/validators/pull/492">#492</a>)</li> </ul> </li> </ul> <p><em><strong>Features</strong></em></p> <ul> <li>feat(uri): add telnet URI validation per RFC 4248 by <a href="https://github.com/tofetpuzo"><code>@tofetpuzo</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/446">#446</a></li> <li>Accept <code>file://</code> URLs per RFC 8089 by <a href="https://github.com/itzzdev09"><code>@itzzdev09</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/483">#483</a></li> <li>cron: accept a step over a range (e.g. <code>1-5/2</code>) and in list items by <a href="https://github.com/itzzdev09"><code>@itzzdev09</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/482">#482</a></li> <li>Accept lowercase IBANs in <code>iban()</code> by <a href="https://github.com/sayantanmandal1"><code>@sayantanmandal1</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/471">#471</a></li> <li>fix(cron): accept day-of-week <code>7</code> as a Sunday alias by <a href="https://github.com/binggao1230"><code>@binggao1230</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/470">#470</a></li> <li>Accept a trailing dot on simple hostnames with <code>rfc_1034</code> by <a href="https://github.com/assinscreedFC"><code>@assinscreedFC</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/462">#462</a></li> <li>fix(crypto_addresses): accept testnet (<code>tb</code>) segwit addresses by <a href="https://github.com/Jordan-Bourillot"><code>@Jordan-Bourillot</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/466">#466</a></li> </ul> <p><em><strong>Maintenance</strong></em></p> <ul> <li>chore(deps): bump requests from 2.32.3 to 2.32.4 in /package by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/430">#430</a></li> <li>fix: reject MAC addresses with mixed separators by <a href="https://github.com/iCasture"><code>@iCasture</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/432">#432</a></li> <li>feat: Optimize slug. Extend tests. by <a href="https://github.com/welder87"><code>@welder87</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/439">#439</a></li> <li>chore: update codebase to reflect new username by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/447">#447</a></li> <li>docs: correct PossibleValueTypes note in between to include None by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/460">#460</a></li> <li>chore!: drop Python 3.9 and 3.10, bump vulnerable dev dependencies by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/488">#488</a></li> <li>fix: restore certifi and jinja2 pins downgraded by stale lock by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/489">#489</a></li> <li>chore: use native pyproject config for tox and pytest by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/490">#490</a></li> <li>test: cover RFC length limits for domain() and hostname() by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/493">#493</a></li> <li>chore!: adopt uv and PEP 735 dependency groups by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/495">#495</a></li> <li>ci: update GitHub Actions to their latest versions by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/496">#496</a></li> <li>docs: explain why the documentation is hosted on the maintainer's fork by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/497">#497</a></li> <li>docs: hide badges from the man page; upgrade docs tooling to latest stable by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/498">#498</a></li> <li>ci: deploy versioned documentation with mike from the fork by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/500">#500</a></li> <li>docs!: build and version the online documentation with Zensical by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/502">#502</a></li> <li>ci: publish to PyPI with trusted publishing by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/504">#504</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/python-validators/validators/compare/0.35.0...0.36.0"><code>0.35.0...0.36.0</code></a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/python-validators/validators/blob/master/CHANGES.md">validators's changelog</a>.</em></p> <blockquote> <h2>0.36.0 (2026-10-10)</h2> <p><em><strong>Breaking</strong></em> ⚠️</p> <ul> <li>Drops support for Python <code>v3.9</code> and <code>v3.10</code>. Python <code>v3.11</code> or newer is required. (<a href="https://redirect.github.com/python-validators/validators/pull/488">#488</a>)</li> <li>Stricter validation: the following inputs, previously accepted by mistake, are now rejected. <ul> <li><code>isin()</code> now verifies the check digit, which was previously ignored. Lowercase ISINs are still accepted. (<a href="https://redirect.github.com/python-validators/validators/pull/464">#464</a>)</li> <li><code>cusip()</code> and <code>sedol()</code> require a numeric check digit. (<a href="https://redirect.github.com/python-validators/validators/pull/487">#487</a>)</li> <li><code>md5()</code>, <code>sha1()</code>, <code>sha224()</code>, <code>sha256()</code>, <code>sha384()</code>, <code>sha512()</code>, <code>base16()</code>, <code>base32()</code>, <code>base58()</code> and <code>base64()</code> reject trailing characters, such as a trailing newline. (<a href="https://redirect.github.com/python-validators/validators/pull/486">#486</a>)</li> <li><code>ind_pan()</code> requires a full-string match. (<a href="https://redirect.github.com/python-validators/validators/pull/478">#478</a>)</li> <li><code>fr_ssn()</code> no longer accepts a comma as the gender or Corsica department character. (<a href="https://redirect.github.com/python-validators/validators/pull/469">#469</a>, merged as <a href="https://redirect.github.com/python-validators/validators/pull/491">#491</a>)</li> <li><code>domain()</code> rejects an underscore in the last label (<a href="https://redirect.github.com/python-validators/validators/pull/485">#485</a>) and names longer than 253 octets once IDNA-encoded, as defined by RFC 1035. (<a href="https://redirect.github.com/python-validators/validators/pull/461">#461</a>)</li> <li><code>mastercard()</code> accepts only the 2221-2720 range of the 2-series BINs. (<a href="https://redirect.github.com/python-validators/validators/pull/467">#467</a>)</li> <li><code>eth_address()</code> rejects non-hexadecimal characters. (<a href="https://redirect.github.com/python-validators/validators/pull/466">#466</a>)</li> <li><code>mac_address()</code> rejects mixed separators. (<a href="https://redirect.github.com/python-validators/validators/pull/432">#432</a>)</li> <li><code>slug()</code> rejects a trailing newline, and telnet URIs reject control characters. (<a href="https://redirect.github.com/python-validators/validators/pull/492">#492</a>)</li> </ul> </li> </ul> <p><em><strong>Features</strong></em></p> <ul> <li>feat(uri): add telnet URI validation per RFC 4248 by <a href="https://github.com/tofetpuzo"><code>@tofetpuzo</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/446">#446</a></li> <li>Accept <code>file://</code> URLs per RFC 8089 by <a href="https://github.com/itzzdev09"><code>@itzzdev09</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/483">#483</a></li> <li>cron: accept a step over a range (e.g. <code>1-5/2</code>) and in list items by <a href="https://github.com/itzzdev09"><code>@itzzdev09</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/482">#482</a></li> <li>Accept lowercase IBANs in <code>iban()</code> by <a href="https://github.com/sayantanmandal1"><code>@sayantanmandal1</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/471">#471</a></li> <li>fix(cron): accept day-of-week <code>7</code> as a Sunday alias by <a href="https://github.com/binggao1230"><code>@binggao1230</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/470">#470</a></li> <li>Accept a trailing dot on simple hostnames with <code>rfc_1034</code> by <a href="https://github.com/assinscreedFC"><code>@assinscreedFC</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/462">#462</a></li> <li>fix(crypto_addresses): accept testnet (<code>tb</code>) segwit addresses by <a href="https://github.com/Jordan-Bourillot"><code>@Jordan-Bourillot</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/466">#466</a></li> </ul> <p><em><strong>Maintenance</strong></em></p> <ul> <li>chore(deps): bump requests from 2.32.3 to 2.32.4 in /package by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/430">#430</a></li> <li>fix: reject MAC addresses with mixed separators by <a href="https://github.com/iCasture"><code>@iCasture</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/432">#432</a></li> <li>feat: Optimize slug. Extend tests. by <a href="https://github.com/welder87"><code>@welder87</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/439">#439</a></li> <li>chore: update codebase to reflect new username by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/447">#447</a></li> <li>docs: correct PossibleValueTypes note in between to include None by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/460">#460</a></li> <li>chore!: drop Python 3.9 and 3.10, bump vulnerable dev dependencies by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/488">#488</a></li> <li>fix: restore certifi and jinja2 pins downgraded by stale lock by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/489">#489</a></li> <li>chore: use native pyproject config for tox and pytest by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/490">#490</a></li> <li>test: cover RFC length limits for domain() and hostname() by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/493">#493</a></li> <li>chore!: adopt uv and PEP 735 dependency groups by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/495">#495</a></li> <li>ci: update GitHub Actions to their latest versions by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/496">#496</a></li> <li>docs: explain why the documentation is hosted on the maintainer's fork by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/497">#497</a></li> <li>docs: hide badges from the man page; upgrade docs tooling to latest stable by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/498">#498</a></li> <li>ci: deploy versioned documentation with mike from the fork by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/500">#500</a></li> <li>docs!: build and version the online documentation with Zensical by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/502">#502</a></li> <li>ci: publish to PyPI with trusted publishing by <a href="https://github.com/nandgator"><code>@nandgator</code></a> in <a href="https://redirect.github.com/python-validators/validators/pull/504">#504</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/python-validators/validators/compare/0.35.0...0.36.0"><code>0.35.0...0.36.0</code></a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/python-validators/validators/commit/e2e49fb3bb4b9f1ce955638386aa167356d24055"><code>e2e49fb</code></a> ci: publish to PyPI with trusted publishing</li> <li><a href="https://github.com/python-validators/validators/commit/f749c78730161d6d743f9bb1512010c405ee3a5d"><code>f749c78</code></a> docs!: build and version the online documentation with Zensical</li> <li><a href="https://github.com/python-validators/validators/commit/7bffa5ed51f4b0ac7d872f57aa3197bb8c1209af"><code>7bffa5e</code></a> ci: deploy versioned documentation with mike from the fork</li> <li><a href="https://github.com/python-validators/validators/commit/3bf8a58c57b2069ffc56a56874eb5d177e1e5c43"><code>3bf8a58</code></a> docs: add <a href="https://redirect.github.com/python-validators/validators/issues/498">#498</a> to the 0.36.0 changelog</li> <li><a href="https://github.com/python-validators/validators/commit/9176e63cb9d9860371a972d72b8902c0e351826f"><code>9176e63</code></a> docs: add <a href="https://redirect.github.com/python-validators/validators/issues/496">#496</a> and <a href="https://redirect.github.com/python-validators/validators/issues/497">#497</a> to the 0.36.0 changelog</li> <li><a href="https://github.com/python-validators/validators/commit/e035f1b40e7b91126b3c6fd9a10d0590ef1e5784"><code>e035f1b</code></a> docs: add <a href="https://redirect.github.com/python-validators/validators/issues/495">#495</a> to the 0.36.0 changelog</li> <li><a href="https://github.com/python-validators/validators/commit/d3f0048e2831fba85e642cdc30c205639db872af"><code>d3f0048</code></a> chore: prepare for release 0.36.0</li> <li><a href="https://github.com/python-validators/validators/commit/cdbe4af7f2f86c639774d5d94d81d06cf2dc7063"><code>cdbe4af</code></a> docs: hide badges from the man page; regenerate docs with current tooling</li> <li><a href="https://github.com/python-validators/validators/commit/fd5333a0dafcc33cba3dc73f8c559cbb18ce6d23"><code>fd5333a</code></a> chore: loosen docs tooling bounds, rename mkdocstrings 'import' to 'inventories'</li> <li><a href="https://github.com/python-validators/validators/commit/16ec0ef8b5cf5478b665e3826f31f2af053282d7"><code>16ec0ef</code></a> ci: update GitHub Actions to their latest versions</li> <li>Additional commits viewable in <a href="https://github.com/python-validators/validators/compare/0.35.0...0.36.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Mailgoose is a web application that allows the users to check whether their SPF, DMARC and DKIM configuration is set up correctly. CERT PL uses it to run bezpiecznapoczta.cert.pl, an online service that helps Polish institutions to configure their domains to decrease the probability of successful e-mail spoofing.
Under the hood, Mailgoose uses checkdmarc and dkimpy, among others.
Quick Start 🔨 | Docs 📚
Features
For an up-to-date list of features, please refer to the documentation.
Screenshots
Development
Tests
To run the tests, use:
./scripts/test
Code formatting
Mailgoose uses pre-commit to run linters and format the code.
pre-commit is executed on CI to verify that the code is formatted properly.
To run it locally, use:
pre-commit run --all-files
To setup pre-commit so that it runs before each commit, use:
pre-commit install
Building the docs
To build the documentation, use:
cd docs
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
make html
Releasing
Before creating new release for mailgoose, you should update files with new version number:
scan/setup.py#L12-version=""docs/conf.py#L36-release = ""
Then create new release with given version.
Contributing
Contributions are welcome! We will appreciate both ideas for improvements (added as GitHub issues) as well as pull requests with new features or code improvements.
However obvious it may seem we kindly remind you that by contributing to mailgoose you agree that the BSD 3-Clause License shall apply to your input automatically, without the need for any additional declarations to be made.
