Skip to main content

MailRadar 📡

Know your email security posture — before attackers do.

Python License: MIT PyPI Docker GDPR Art. 32

MailRadar is an open-source CLI tool that audits the email security posture of any domain — checking DMARC, SPF, DKIM, BIMI, VMC and GPG key availability — and generates ready-to-send reports for domain owners.


Why MailRadar?

Email authentication is a critical but often overlooked layer of security. A domain without proper DMARC, SPF and DKIM configuration can be spoofed — allowing attackers to impersonate organizations, DPOs, legal contacts or public entities.

Under GDPR Article 32, data controllers are required to implement appropriate technical measures to ensure security. A missing or misconfigured DMARC policy is a measurable, documentable gap.

MailRadar makes that gap visible — and actionable.


Features

  • ✅ DMARC — policy level (none/quarantine/reject), alignment, reporting
  • ✅ SPF — record presence, permissiveness (-all vs ~all vs +all)
  • ✅ DKIM — selector detection, key length verification (via cryptography library)
  • ✅ BIMI — record presence and SVG logo validation
  • ✅ VMC — Verified Mark Certificate detection
  • ✅ MTA-STS — policy presence and mode
  • ✅ TLS-RPT — TLS reporting configuration
  • ✅ GPG — public key lookup on keyservers (keys.openpgp.org, keyserver.ubuntu.com)
  • ✅ Security contact — security@ / postmaster@ / dpo@ detection
  • 📊 Scoring — 0-100 security score with severity levels
  • 📧 Report generation — ready-to-send email template with current vs recommended configuration
  • 🔐 GPG-encrypted delivery — if target has a public key, report is encrypted before sending
  • 📄 PDF export — formal audit report for GDPR Art. 32 documentation

Real-world examples

$ mailradar check maksimtech.com

Domain: maksimtech.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ DMARC    p=reject | pct=100 | adkim=s | aspf=s | rua ✓ | ruf ✓
✅ SPF      v=spf1 include:spf.infomaniak.ch -all
✅ DKIM     selector: 20250324 | RSA 2048-bit
❌ BIMI     not configured
❌ MTA-STS  not configured
❌ TLS-RPT  not configured

Score: 85/100 — 🟢 GOOD
$ mailradar check [external-dpo-firm.tld]

Domain: [external-dpo-firm.tld]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

⚠️  DMARC    p=quarantine | pct=100 | adkim=s | aspf=s | rua ✓ | ruf ✓
✅ SPF      -all (configured)
⚠️  DKIM     selector: selector1 | RSA 1024-bit
⚠️  BIMI     present but SVG error (HTTP 301) | no VMC
❌ MTA-STS  not configured
❌ TLS-RPT  not configured

Score: 68/100 — 🟡 MODERATE

Issues found:
  • DMARC policy is quarantine — upgrade to reject
  • DKIM key is 1024-bit — upgrade to 2048-bit recommended
  • BIMI SVG not accessible
  • BIMI present but no VMC — logo not verified by CA
  • No MTA-STS configured
  • No TLS-RPT configured

The second example is a real external DPO firm handling GDPR compliance for major organizations — tested with MailRadar on its first run.


Installation

# Via pip
pip install mailradar

# Via Docker
docker pull maksimtech/mailradar
docker run --rm maksimtech/mailradar check example.com

# From source
git clone https://github.com/maksimtech/mailradar
cd mailradar
pip install -e .

Usage

# Basic check
mailradar check example.com

# Verbose — show raw DNS records
mailradar check example.com --verbose

# Check multiple domains from file
mailradar batch domains.txt

# Generate PDF for GDPR Art. 32 documentation
mailradar check example.com --report --format pdf

# Check and send report to domain owner
mailradar check example.com --send --from security@yourdomain.com

Scoring

Score Level Description
90-100 🟢 EXCELLENT Full implementation including BIMI+VMC
75-89 🟢 GOOD DMARC p=reject, SPF -all, DKIM 2048-bit
50-74 🟡 MODERATE DMARC present but not at reject level
25-49 🟠 POOR Partial or misconfigured authentication
0-24 🔴 CRITICAL No meaningful email authentication

GDPR Relevance

MailRadar is particularly relevant for:

  • DPOs auditing the email security posture of data controllers they assist
  • IT managers documenting technical measures under GDPR Art. 32
  • Security researchers identifying spoofable domains of public entities
  • Compliance teams generating evidence for audit trails

A domain with p=none DMARC handling sensitive personal data communications is a documentable Art. 32 gap.


Report Template

MailRadar generates localized email reports (IT/EN) with:

  • Current configuration (actual DNS records)
  • Recommended configuration (copy-paste ready DNS records)
  • Provider-specific guidance (Infomaniak, Google Workspace, Microsoft 365, Proton)
  • GPG-encrypted delivery if target public key is available on keyservers

  • PatchRadar — CVE monitoring for self-hosted software stacks

Built with


Contributing

Contributions welcome. Open an issue or PR on GitHub.


License

MIT — see LICENSE


Built by maksimtech — also maintaining PatchRadar

Release files for mailradar 2026.9.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mailradar 2026.9.8
File Size Uploaded
mailradar-2026.9.8.tar.gz 77.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mailradar 2026.9.8
File Interpreter ABI Platform
mailradar-2026.9.8-py3-none-any.whl Python 3 none any Details

Total release size: 103.0 kB

Release files / mailradar-2026.9.8.tar.gz

Download URL mailradar-2026.9.8.tar.gz
Size 77.1 kB
Tags Source
SHA-256 checksum
How to use checksums
768794a35817af4e3c1862f03ec57695207db5f6391dc1a48fe5d8ea8e6dd1cc
BLAKE2b-256 checksum
How to use checksums
58e5bad27adfc5b4640042a6b1365e58d5500f12ca504021e403ca0c6efbc8b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / mailradar-2026.9.8-py3-none-any.whl

Download URL mailradar-2026.9.8-py3-none-any.whl
Size 25.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc3dc3fd9744eef6bc663964cb59bf8619a5e98532397a0a6d5a9cff8af0e7a6
BLAKE2b-256 checksum
How to use checksums
591b0c37e473abd3519ab064bb7ef2a0371513f61877ba5108bbf1949b9bd32a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.9.8 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page