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

Related Projects

  • 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.3

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.3
File Size Uploaded
mailradar-2026.9.3.tar.gz 67.8 kB Details

Built distribution (wheel)

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

Total release size: 91.9 kB

Release files / mailradar-2026.9.3.tar.gz

Download URL mailradar-2026.9.3.tar.gz
Size 67.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4869db27574f436ffa44b12031c15a2ba6c96c8a4b0e090190861e1ceabf89d1
BLAKE2b-256 checksum
How to use checksums
c898142dc63273d4cbc95f6e28619c1739e63ecdc47908ca0e70d0736700fad1
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 8, 2026.

Transparency log

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

Download URL mailradar-2026.9.3-py3-none-any.whl
Size 24.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f78de7840ee63e5bf3f9e071ff3279e8452fd8c277b44ac62145c488a8dc244d
BLAKE2b-256 checksum
How to use checksums
9f5bf8cf8ecb23b383a3a86d9547c30cd54813913cd17cbaced63e95bd23f9c9
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 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.9.3 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